Merge pull request #767 from coreemu/develop

CORE 9.0.2
This commit is contained in:
bharnden 2023-03-02 22:12:35 -08:00 committed by GitHub
commit c44dc521fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 1070 additions and 703 deletions

View file

@ -1,3 +1,23 @@
## 2023-03-02 CORE 9.0.2
* Installation
* updated python dependencies, including invoke to resolve python 3.10+ issues
* improved example dockerfiles to use less space for built images
* Documentation
* updated emane install instructions
* added Docker related issues to install instructions
* core-daemon
* fixed issue using invalid device name in sysctl commands
* updated PTP nodes to properly disable mac learning for their linux bridge
* fixed issue for LXC nodes to properly use a configured image name and write it to XML
* \#742 - fixed issue with bad wlan node id being used
* \#744 - fixed issue not properly setting broadcast address
## core-gui
* fixed sample1.xml to remove SSH service
* fixed emane demo examples
* fixed issue displaying emane configs generally configured for a node
## 2022-11-28 CORE 9.0.1 ## 2022-11-28 CORE 9.0.1
* Installation * Installation

View file

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
# this defines the CORE version number, must be static for AC_INIT # this defines the CORE version number, must be static for AC_INIT
AC_INIT(core, 9.0.1) AC_INIT(core, 9.0.2)
# autoconf and automake initialization # autoconf and automake initialization
AC_CONFIG_SRCDIR([netns/version.h.in]) AC_CONFIG_SRCDIR([netns/version.h.in])

View file

@ -160,12 +160,12 @@ def throughput_listener(
stream: Any, handler: Callable[[wrappers.ThroughputsEvent], None] stream: Any, handler: Callable[[wrappers.ThroughputsEvent], None]
) -> None: ) -> None:
""" """
Listen for throughput events and provide them to the handler. Listen for throughput events and provide them to the handler.
:param stream: grpc stream that will provide events :param stream: grpc stream that will provide events
:param handler: function that handles an event :param handler: function that handles an event
:return: nothing :return: nothing
""" """
try: try:
for event_proto in stream: for event_proto in stream:
event = wrappers.ThroughputsEvent.from_proto(event_proto) event = wrappers.ThroughputsEvent.from_proto(event_proto)

View file

@ -2,7 +2,7 @@ import logging
from queue import Empty, Queue from queue import Empty, Queue
from typing import Iterable, Optional from typing import Iterable, Optional
from core.api.grpc import core_pb2 from core.api.grpc import core_pb2, grpcutils
from core.api.grpc.grpcutils import convert_link_data from core.api.grpc.grpcutils import convert_link_data
from core.emulator.data import ( from core.emulator.data import (
ConfigData, ConfigData,
@ -17,28 +17,18 @@ from core.emulator.session import Session
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def handle_node_event(node_data: NodeData) -> core_pb2.Event: def handle_node_event(session: Session, node_data: NodeData) -> core_pb2.Event:
""" """
Handle node event when there is a node event Handle node event when there is a node event
:param session: session node is from
:param node_data: node data :param node_data: node data
:return: node event that contains node id, name, model, position, and services :return: node event that contains node id, name, model, position, and services
""" """
node = node_data.node node = node_data.node
x, y, _ = node.position.get() emane_configs = grpcutils.get_emane_model_configs_dict(session)
position = core_pb2.Position(x=x, y=y) node_emane_configs = emane_configs.get(node.id, [])
lon, lat, alt = node.position.get_geo() node_proto = grpcutils.get_node_proto(session, node, node_emane_configs)
geo = core_pb2.Geo(lon=lon, lat=lat, alt=alt)
services = [x.name for x in node.services]
node_proto = core_pb2.Node(
id=node.id,
name=node.name,
model=node.model,
icon=node.icon,
position=position,
geo=geo,
services=services,
)
message_type = node_data.message_type.value message_type = node_data.message_type.value
node_event = core_pb2.NodeEvent(message_type=message_type, node=node_proto) node_event = core_pb2.NodeEvent(message_type=message_type, node=node_proto)
return core_pb2.Event(node_event=node_event, source=node_data.source) return core_pb2.Event(node_event=node_event, source=node_data.source)
@ -189,7 +179,7 @@ class EventStreamer:
try: try:
data = self.queue.get(timeout=1) data = self.queue.get(timeout=1)
if isinstance(data, NodeData): if isinstance(data, NodeData):
event = handle_node_event(data) event = handle_node_event(self.session, data)
elif isinstance(data, LinkData): elif isinstance(data, LinkData):
event = handle_link_event(data) event = handle_link_event(data)
elif isinstance(data, EventData): elif isinstance(data, EventData):

View file

@ -34,7 +34,7 @@ from core.nodes.base import (
) )
from core.nodes.docker import DockerNode, DockerOptions from core.nodes.docker import DockerNode, DockerOptions
from core.nodes.interface import CoreInterface from core.nodes.interface import CoreInterface
from core.nodes.lxd import LxcNode from core.nodes.lxd import LxcNode, LxcOptions
from core.nodes.network import CoreNetwork, CtrlNet, PtpNet, WlanNode from core.nodes.network import CoreNetwork, CtrlNet, PtpNet, WlanNode
from core.nodes.wireless import WirelessNode from core.nodes.wireless import WirelessNode
from core.services.coreservices import CoreService from core.services.coreservices import CoreService
@ -81,7 +81,7 @@ def add_node_data(
options.config_services = node_proto.config_services options.config_services = node_proto.config_services
if isinstance(options, EmaneOptions): if isinstance(options, EmaneOptions):
options.emane_model = node_proto.emane options.emane_model = node_proto.emane
if isinstance(options, DockerOptions): if isinstance(options, (DockerOptions, LxcOptions)):
options.image = node_proto.image options.image = node_proto.image
position = Position() position = Position()
position.set(node_proto.position.x, node_proto.position.y) position.set(node_proto.position.x, node_proto.position.y)
@ -117,7 +117,7 @@ def link_iface(iface_proto: core_pb2.Interface) -> InterfaceData:
def add_link_data( def add_link_data(
link_proto: core_pb2.Link link_proto: core_pb2.Link,
) -> Tuple[InterfaceData, InterfaceData, LinkOptions]: ) -> Tuple[InterfaceData, InterfaceData, LinkOptions]:
""" """
Convert link proto to link interfaces and options data. Convert link proto to link interfaces and options data.

View file

@ -518,7 +518,7 @@ class Session:
self.set_node_pos(node, position.x, position.y) self.set_node_pos(node, position.x, position.y)
# setup default wlan # setup default wlan
if isinstance(node, WlanNode): if isinstance(node, WlanNode):
self.mobility.set_model_config(self.id, BasicRangeModel.name) self.mobility.set_model_config(node.id, BasicRangeModel.name)
# boot core nodes after runtime # boot core nodes after runtime
is_runtime = self.state == EventTypes.RUNTIME_STATE is_runtime = self.state == EventTypes.RUNTIME_STATE
if is_runtime and isinstance(node, CoreNode): if is_runtime and isinstance(node, CoreNode):
@ -1113,7 +1113,12 @@ class Session:
:param node: node to boot :param node: node to boot
:return: nothing :return: nothing
""" """
logger.info("booting node(%s): %s", node.name, [x.name for x in node.services]) logger.info(
"booting node(%s): config services(%s) services(%s)",
node.name,
", ".join(node.config_services.keys()),
", ".join(x.name for x in node.services),
)
self.services.boot_services(node) self.services.boot_services(node)
node.start_config_services() node.start_config_services()

View file

@ -753,7 +753,7 @@ class CoreClient:
return self.client.get_config_service_rendered(self.session.id, node_id, name) return self.client.get_config_service_rendered(self.session.id, node_id, name)
def get_config_service_configs_proto( def get_config_service_configs_proto(
self self,
) -> List[configservices_pb2.ConfigServiceConfig]: ) -> List[configservices_pb2.ConfigServiceConfig]:
config_service_protos = [] config_service_protos = []
for node in self.session.nodes.values(): for node in self.session.nodes.values():

View file

@ -1,131 +1,77 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<scenario name="/home/developer/.core/configs/emane-demo-antenna.xml"> <scenario name="/tmp/tmpd4t2sxy2">
<networks> <networks>
<network id="5" name="wlan5" model="emane_rfpipe" type="EMANE"> <network id="5" name="wlan5" icon="" canvas="0" model="emane_rfpipe" type="EMANE">
<position x="388" y="555" lat="47.57412169587584" lon="-122.12709380504643" alt="2.0"/> <position x="388.0" y="555.0" lat="47.574121408201655" lon="-122.12709602379641" alt="2.0"/>
</network> </network>
</networks> </networks>
<devices> <devices>
<device id="1" name="n1" type="mdr" class="" image=""> <device id="1" name="n1" icon="" canvas="0" type="mdr" class="" image="">
<position x="258" y="147" lat="47.577830502987744" lon="-122.12884551985047" alt="2.0"/> <position x="258.0" y="147.0" lat="47.57783021533393" lon="-122.12884773860046" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="2" name="n2" type="mdr" class="" image=""> <device id="2" name="n2" icon="" canvas="0" type="mdr" class="" image="">
<position x="526" y="147" lat="47.577830502987744" lon="-122.12523429240828" alt="2.0"/> <position x="526.0" y="147.0" lat="47.57783021533393" lon="-122.12523651115826" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="3" name="n3" type="mdr" class="" image=""> <device id="3" name="n3" icon="" canvas="0" type="mdr" class="" image="">
<position x="241" y="387" lat="47.57564888355958" lon="-122.12907459024791" alt="2.0"/> <position x="241.0" y="387.0" lat="47.575648595893774" lon="-122.1290768089979" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="4" name="n4" type="mdr" class="" image=""> <device id="4" name="n4" icon="" canvas="0" type="mdr" class="" image="">
<position x="529" y="385" lat="47.57566706409707" lon="-122.1251938682205" alt="2.0"/> <position x="529.0" y="385.0" lat="47.57566677643136" lon="-122.12519608697049" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
</devices> </devices>
<links> <links>
<link node1="5" node2="1"> <link node1="1" node2="5">
<iface2 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/> <iface1 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/>
</link> </link>
<link node1="5" node2="2"> <link node1="2" node2="5">
<iface2 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/> <iface1 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/>
</link> </link>
<link node1="5" node2="3"> <link node1="3" node2="5">
<iface2 nem="3" id="0" name="eth0" mac="02:02:00:00:00:03" ip4="10.0.0.3" ip4_mask="32" ip6="2001::3" ip6_mask="128"/> <iface1 nem="3" id="0" name="eth0" mac="02:02:00:00:00:03" ip4="10.0.0.3" ip4_mask="32" ip6="2001::3" ip6_mask="128"/>
</link> </link>
<link node1="5" node2="4"> <link node1="4" node2="5">
<iface2 nem="4" id="0" name="eth0" mac="02:02:00:00:00:04" ip4="10.0.0.4" ip4_mask="32" ip6="2001::4" ip6_mask="128"/> <iface1 nem="4" id="0" name="eth0" mac="02:02:00:00:00:04" ip4="10.0.0.4" ip4_mask="32" ip6="2001::4" ip6_mask="128"/>
</link> </link>
</links> </links>
<emane_global_configuration>
<emulator>
<configuration name="antennaprofilemanifesturi" value="/tmp/emane/antennaprofile.xml"/>
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</emulator>
<core>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
</core>
</emane_global_configuration>
<emane_configurations> <emane_configurations>
<emane_configuration node="5" model="emane_rfpipe">
<mac>
<configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/>
<configuration name="enablepromiscuousmode" value="0"/>
<configuration name="flowcontrolenable" value="0"/>
<configuration name="flowcontroltokens" value="10"/>
<configuration name="jitter" value="0.000000"/>
<configuration name="neighbormetricdeletetime" value="60.000000"/>
<configuration name="pcrcurveuri" value="/usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml"/>
<configuration name="radiometricenable" value="0"/>
<configuration name="radiometricreportinterval" value="1.000000"/>
</mac>
<phy>
<configuration name="bandwidth" value="1000000"/>
<configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/>
<configuration name="fading.nakagami.m0" value="0.750000"/>
<configuration name="fading.nakagami.m1" value="1.000000"/>
<configuration name="fading.nakagami.m2" value="200.000000"/>
<configuration name="fixedantennagain" value="0.000000"/>
<configuration name="fixedantennagainenable" value="1"/>
<configuration name="frequency" value="2347000000"/>
<configuration name="frequencyofinterest" value="2347000000"/>
<configuration name="noisebinsize" value="20"/>
<configuration name="noisemaxclampenable" value="0"/>
<configuration name="noisemaxmessagepropagation" value="200000"/>
<configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/>
<configuration name="propagationmodel" value="2ray"/>
<configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/>
<configuration name="txpower" value="0.000000"/>
</phy>
<external>
<configuration name="external" value="0"/>
<configuration name="platformendpoint" value="127.0.0.1:40001"/>
<configuration name="transportendpoint" value="127.0.0.1:50002"/>
</external>
</emane_configuration>
<emane_configuration node="1" model="emane_rfpipe"> <emane_configuration node="1" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -140,6 +86,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -156,7 +113,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="outofband"/> <configuration name="noisemode" value="outofband"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -169,6 +129,23 @@
</external> </external>
</emane_configuration> </emane_configuration>
<emane_configuration node="2" model="emane_rfpipe"> <emane_configuration node="2" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -183,6 +160,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -199,7 +187,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="outofband"/> <configuration name="noisemode" value="outofband"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -212,6 +203,23 @@
</external> </external>
</emane_configuration> </emane_configuration>
<emane_configuration node="3" model="emane_rfpipe"> <emane_configuration node="3" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -226,6 +234,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -242,7 +261,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="outofband"/> <configuration name="noisemode" value="outofband"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -255,6 +277,23 @@
</external> </external>
</emane_configuration> </emane_configuration>
<emane_configuration node="4" model="emane_rfpipe"> <emane_configuration node="4" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -269,6 +308,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -285,7 +335,84 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="outofband"/> <configuration name="noisemode" value="outofband"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/>
<configuration name="txpower" value="0.000000"/>
</phy>
<external>
<configuration name="external" value="0"/>
<configuration name="platformendpoint" value="127.0.0.1:40001"/>
<configuration name="transportendpoint" value="127.0.0.1:50002"/>
</external>
</emane_configuration>
<emane_configuration node="5" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac>
<configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/>
<configuration name="enablepromiscuousmode" value="0"/>
<configuration name="flowcontrolenable" value="0"/>
<configuration name="flowcontroltokens" value="10"/>
<configuration name="jitter" value="0.000000"/>
<configuration name="neighbormetricdeletetime" value="60.000000"/>
<configuration name="pcrcurveuri" value="/usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml"/>
<configuration name="radiometricenable" value="0"/>
<configuration name="radiometricreportinterval" value="1.000000"/>
</mac>
<phy>
<configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/>
<configuration name="fading.nakagami.m0" value="0.750000"/>
<configuration name="fading.nakagami.m1" value="1.000000"/>
<configuration name="fading.nakagami.m2" value="200.000000"/>
<configuration name="fixedantennagain" value="0.000000"/>
<configuration name="fixedantennagainenable" value="1"/>
<configuration name="frequency" value="2347000000"/>
<configuration name="frequencyofinterest" value="2347000000"/>
<configuration name="noisebinsize" value="20"/>
<configuration name="noisemaxclampenable" value="0"/>
<configuration name="noisemaxmessagepropagation" value="200000"/>
<configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="2ray"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -298,7 +425,7 @@
</external> </external>
</emane_configuration> </emane_configuration>
</emane_configurations> </emane_configurations>
<session_origin lat="47.5791667" lon="-122.132322" alt="2.0" scale="150.0"/> <session_origin lat="47.579166412353516" lon="-122.13232421875" alt="2.0" scale="150.0"/>
<session_options> <session_options>
<configuration name="controlnet" value="172.16.0.0/24"/> <configuration name="controlnet" value="172.16.0.0/24"/>
<configuration name="controlnet0" value=""/> <configuration name="controlnet0" value=""/>
@ -311,10 +438,19 @@
<configuration name="enablesdt" value="0"/> <configuration name="enablesdt" value="0"/>
<configuration name="sdturl" value="tcp://127.0.0.1:50000/"/> <configuration name="sdturl" value="tcp://127.0.0.1:50000/"/>
<configuration name="ovs" value="0"/> <configuration name="ovs" value="0"/>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
<configuration name="mtu" value="0"/>
</session_options> </session_options>
<session_metadata> <session_metadata>
<configuration name="canvas c1" value="{name {Canvas1}}"/> <configuration name="shapes" value="[]"/>
<configuration name="global_options" value="interface_names=no ip_addresses=yes ipv6_addresses=yes node_labels=yes link_labels=yes show_api=no background_images=no annotations=yes grid=yes traffic_start=0"/> <configuration name="edges" value="[]"/>
<configuration name="hidden" value="[]"/>
<configuration name="canvas" value="{&quot;gridlines&quot;: true, &quot;canvases&quot;: [{&quot;id&quot;: 1, &quot;wallpaper&quot;: null, &quot;wallpaper_style&quot;: 1, &quot;fit_image&quot;: false, &quot;dimensions&quot;: [1000, 750]}]}"/>
</session_metadata> </session_metadata>
<default_services> <default_services>
<node type="mdr"> <node type="mdr">

View file

@ -1,66 +1,55 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<scenario name="/home/developer/.core/configs/emane-demo-eel.xml"> <scenario name="/tmp/tmp2mkcwn17">
<networks> <networks>
<network id="3" name="wlan3" model="emane_rfpipe" type="EMANE"> <network id="3" name="wlan3" icon="" canvas="0" model="emane_rfpipe" type="EMANE">
<position x="282" y="317" lat="47.57628519861569" lon="-122.12852212634816" alt="2.0"/> <position x="282.0" y="317.0" lat="47.5762849109534" lon="-122.12852434509814" alt="2.0"/>
</network> </network>
</networks> </networks>
<devices> <devices>
<device id="1" name="n1" type="mdr" class="" image=""> <device id="1" name="n1" icon="" canvas="0" type="mdr" class="" image="">
<position x="153" y="172" lat="47.57760325520506" lon="-122.13026036642295" alt="2.0"/> <position x="153.0" y="172.0" lat="47.577602967549986" lon="-122.13026258517293" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="2" name="n2" type="mdr" class="" image=""> <device id="2" name="n2" icon="" canvas="0" type="mdr" class="" image="">
<position x="393" y="171" lat="47.57761234513531" lon="-122.12702643140011" alt="2.0"/> <position x="393.0" y="171.0" lat="47.57761205748029" lon="-122.1270286501501" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
</devices> </devices>
<links> <links>
<link node1="3" node2="1"> <link node1="1" node2="3">
<iface2 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/> <iface1 id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/>
</link> </link>
<link node1="3" node2="2"> <link node1="2" node2="3">
<iface2 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/> <iface1 id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/>
</link> </link>
</links> </links>
<emane_global_configuration>
<emulator>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</emulator>
<core>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
</core>
</emane_global_configuration>
<emane_configurations> <emane_configurations>
<emane_configuration node="3" model="emane_rfpipe"> <emane_configuration node="3" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -75,6 +64,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -91,7 +91,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/> <configuration name="noisemode" value="none"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -104,7 +107,7 @@
</external> </external>
</emane_configuration> </emane_configuration>
</emane_configurations> </emane_configurations>
<session_origin lat="47.5791667" lon="-122.132322" alt="2.0" scale="150.0"/> <session_origin lat="47.579166412353516" lon="-122.13232421875" alt="2.0" scale="150.0"/>
<session_options> <session_options>
<configuration name="controlnet" value="172.16.0.0/24"/> <configuration name="controlnet" value="172.16.0.0/24"/>
<configuration name="controlnet0" value=""/> <configuration name="controlnet0" value=""/>
@ -117,10 +120,19 @@
<configuration name="enablesdt" value="0"/> <configuration name="enablesdt" value="0"/>
<configuration name="sdturl" value="tcp://127.0.0.1:50000/"/> <configuration name="sdturl" value="tcp://127.0.0.1:50000/"/>
<configuration name="ovs" value="0"/> <configuration name="ovs" value="0"/>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
<configuration name="mtu" value="0"/>
</session_options> </session_options>
<session_metadata> <session_metadata>
<configuration name="canvas c1" value="{name {Canvas1}}"/> <configuration name="shapes" value="[]"/>
<configuration name="global_options" value="interface_names=no ip_addresses=yes ipv6_addresses=yes node_labels=yes link_labels=yes show_api=no background_images=no annotations=yes grid=yes traffic_start=0"/> <configuration name="edges" value="[]"/>
<configuration name="hidden" value="[]"/>
<configuration name="canvas" value="{&quot;gridlines&quot;: true, &quot;canvases&quot;: [{&quot;id&quot;: 1, &quot;wallpaper&quot;: null, &quot;wallpaper_style&quot;: 1, &quot;fit_image&quot;: false, &quot;dimensions&quot;: [1000, 750]}]}"/>
</session_metadata> </session_metadata>
<default_services> <default_services>
<node type="mdr"> <node type="mdr">

View file

@ -1,66 +1,55 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<scenario name="/home/developer/.core/configs/emane-demo-files.xml"> <scenario name="/tmp/tmpsj4dhmce">
<networks> <networks>
<network id="3" name="wlan3" model="emane_rfpipe" type="EMANE"> <network id="3" name="wlan3" icon="" canvas="0" model="emane_rfpipe" type="EMANE">
<position x="282" y="317" lat="47.57628519861569" lon="-122.12852212634816" alt="2.0"/> <position x="282.0" y="317.0" lat="47.5762849109534" lon="-122.12852434509814" alt="2.0"/>
</network> </network>
</networks> </networks>
<devices> <devices>
<device id="1" name="n1" type="mdr" class="" image=""> <device id="1" name="n1" icon="" canvas="0" type="mdr" class="" image="">
<position x="153" y="173" lat="47.57759416527324" lon="-122.13026036642295" alt="2.0"/> <position x="153.0" y="173.0" lat="47.57759387761812" lon="-122.13026258517293" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="2" name="n2" type="mdr" class="" image=""> <device id="2" name="n2" icon="" canvas="0" type="mdr" class="" image="">
<position x="393" y="171" lat="47.57761234513531" lon="-122.12702643140011" alt="2.0"/> <position x="393.0" y="171.0" lat="47.57761205748029" lon="-122.1270286501501" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
</devices> </devices>
<links> <links>
<link node1="3" node2="1"> <link node1="1" node2="3">
<iface2 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/> <iface1 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/>
</link> </link>
<link node1="3" node2="2"> <link node1="2" node2="3">
<iface2 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/> <iface1 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/>
</link> </link>
</links> </links>
<emane_global_configuration>
<emulator>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</emulator>
<core>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
</core>
</emane_global_configuration>
<emane_configurations> <emane_configurations>
<emane_configuration node="3" model="emane_rfpipe"> <emane_configuration node="3" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -75,6 +64,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -91,7 +91,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/> <configuration name="noisemode" value="none"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="2ray"/> <configuration name="propagationmodel" value="2ray"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -104,7 +107,7 @@
</external> </external>
</emane_configuration> </emane_configuration>
</emane_configurations> </emane_configurations>
<session_origin lat="47.5791667" lon="-122.132322" alt="2.0" scale="150.0"/> <session_origin lat="47.579166412353516" lon="-122.13232421875" alt="2.0" scale="150.0"/>
<session_options> <session_options>
<configuration name="controlnet" value="172.16.0.0/24"/> <configuration name="controlnet" value="172.16.0.0/24"/>
<configuration name="controlnet0" value=""/> <configuration name="controlnet0" value=""/>
@ -117,10 +120,19 @@
<configuration name="enablesdt" value="0"/> <configuration name="enablesdt" value="0"/>
<configuration name="sdturl" value="tcp://127.0.0.1:50000/"/> <configuration name="sdturl" value="tcp://127.0.0.1:50000/"/>
<configuration name="ovs" value="0"/> <configuration name="ovs" value="0"/>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
<configuration name="mtu" value="0"/>
</session_options> </session_options>
<session_metadata> <session_metadata>
<configuration name="canvas c1" value="{name {Canvas1}}"/> <configuration name="shapes" value="[]"/>
<configuration name="global_options" value="interface_names=no ip_addresses=yes ipv6_addresses=yes node_labels=yes link_labels=yes show_api=no background_images=no annotations=yes grid=yes traffic_start=0"/> <configuration name="edges" value="[]"/>
<configuration name="hidden" value="[]"/>
<configuration name="canvas" value="{&quot;gridlines&quot;: true, &quot;canvases&quot;: [{&quot;id&quot;: 1, &quot;wallpaper&quot;: null, &quot;wallpaper_style&quot;: 1, &quot;fit_image&quot;: false, &quot;dimensions&quot;: [1000, 750]}]}"/>
</session_metadata> </session_metadata>
<default_services> <default_services>
<node type="mdr"> <node type="mdr">

View file

@ -1,66 +1,55 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<scenario name="/home/developer/.core/configs/emane-demo-gpsd.xml"> <scenario name="/tmp/tmp081pn3j9">
<networks> <networks>
<network id="3" name="wlan3" model="emane_rfpipe" type="EMANE"> <network id="3" name="wlan3" icon="" canvas="0" model="emane_rfpipe" type="EMANE">
<position x="282" y="317" lat="47.57628519861569" lon="-122.12852212634816" alt="2.0"/> <position x="282.0" y="317.0" lat="47.5762849109534" lon="-122.12852434509814" alt="2.0"/>
</network> </network>
</networks> </networks>
<devices> <devices>
<device id="1" name="n1" type="mdr" class="" image=""> <device id="1" name="n1" icon="" canvas="0" type="mdr" class="" image="">
<position x="153" y="173" lat="47.57759416527324" lon="-122.13026036642295" alt="2.0"/> <position x="153.0" y="173.0" lat="47.57759387761812" lon="-122.13026258517293" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="2" name="n2" type="mdr" class="" image=""> <device id="2" name="n2" icon="" canvas="0" type="mdr" class="" image="">
<position x="393" y="171" lat="47.57761234513531" lon="-122.12702643140011" alt="2.0"/> <position x="393.0" y="171.0" lat="47.57761205748029" lon="-122.1270286501501" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
</devices> </devices>
<links> <links>
<link node1="3" node2="1"> <link node1="1" node2="3">
<iface2 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/> <iface1 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/>
</link> </link>
<link node1="3" node2="2"> <link node1="2" node2="3">
<iface2 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/> <iface1 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/>
</link> </link>
</links> </links>
<emane_global_configuration>
<emulator>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</emulator>
<core>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
</core>
</emane_global_configuration>
<emane_configurations> <emane_configurations>
<emane_configuration node="3" model="emane_rfpipe"> <emane_configuration node="3" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -75,6 +64,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -91,7 +91,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/> <configuration name="noisemode" value="none"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="2ray"/> <configuration name="propagationmodel" value="2ray"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -104,7 +107,7 @@
</external> </external>
</emane_configuration> </emane_configuration>
</emane_configurations> </emane_configurations>
<session_origin lat="47.5791667" lon="-122.132322" alt="2.0" scale="150.0"/> <session_origin lat="47.579166412353516" lon="-122.13232421875" alt="2.0" scale="150.0"/>
<session_options> <session_options>
<configuration name="controlnet" value="172.16.0.0/24"/> <configuration name="controlnet" value="172.16.0.0/24"/>
<configuration name="controlnet0" value=""/> <configuration name="controlnet0" value=""/>
@ -117,10 +120,19 @@
<configuration name="enablesdt" value="0"/> <configuration name="enablesdt" value="0"/>
<configuration name="sdturl" value="tcp://127.0.0.1:50000/"/> <configuration name="sdturl" value="tcp://127.0.0.1:50000/"/>
<configuration name="ovs" value="0"/> <configuration name="ovs" value="0"/>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
<configuration name="mtu" value="0"/>
</session_options> </session_options>
<session_metadata> <session_metadata>
<configuration name="canvas c1" value="{name {Canvas1}}"/> <configuration name="shapes" value="[]"/>
<configuration name="global_options" value="interface_names=no ip_addresses=yes ipv6_addresses=yes node_labels=yes link_labels=yes show_api=no background_images=no annotations=yes grid=yes traffic_start=0"/> <configuration name="edges" value="[]"/>
<configuration name="hidden" value="[]"/>
<configuration name="canvas" value="{&quot;gridlines&quot;: true, &quot;canvases&quot;: [{&quot;id&quot;: 1, &quot;wallpaper&quot;: null, &quot;wallpaper_style&quot;: 1, &quot;fit_image&quot;: false, &quot;dimensions&quot;: [1000, 750]}]}"/>
</session_metadata> </session_metadata>
<default_services> <default_services>
<node type="mdr"> <node type="mdr">

View file

@ -1,66 +1,55 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<scenario name="/home/developer/.core/configs/emane-demo-precomputed.xml"> <scenario name="/tmp/tmpfokvqh5k">
<networks> <networks>
<network id="3" name="wlan3" model="emane_rfpipe" type="EMANE"> <network id="3" name="wlan3" icon="" canvas="0" model="emane_rfpipe" type="EMANE">
<position x="282" y="317" lat="47.57628519861569" lon="-122.12852212634816" alt="2.0"/> <position x="282.0" y="317.0" lat="47.5762849109534" lon="-122.12852434509814" alt="2.0"/>
</network> </network>
</networks> </networks>
<devices> <devices>
<device id="1" name="n1" type="mdr" class="" image=""> <device id="1" name="n1" icon="" canvas="0" type="mdr" class="" image="">
<position x="153" y="172" lat="47.57760325520506" lon="-122.13026036642295" alt="2.0"/> <position x="153.0" y="172.0" lat="47.577602967549986" lon="-122.13026258517293" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
<device id="2" name="n2" type="mdr" class="" image=""> <device id="2" name="n2" icon="" canvas="0" type="mdr" class="" image="">
<position x="393" y="171" lat="47.57761234513531" lon="-122.12702643140011" alt="2.0"/> <position x="393.0" y="171.0" lat="47.57761205748029" lon="-122.1270286501501" alt="2.0"/>
<services> <services>
<service name="zebra"/> <service name="zebra"/>
<service name="OSPFv3MDR"/>
<service name="IPForward"/> <service name="IPForward"/>
<service name="OSPFv3MDR"/>
</services> </services>
</device> </device>
</devices> </devices>
<links> <links>
<link node1="3" node2="1"> <link node1="1" node2="3">
<iface2 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/> <iface1 nem="1" id="0" name="eth0" mac="02:02:00:00:00:01" ip4="10.0.0.1" ip4_mask="32" ip6="2001::1" ip6_mask="128"/>
</link> </link>
<link node1="3" node2="2"> <link node1="2" node2="3">
<iface2 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/> <iface1 nem="2" id="0" name="eth0" mac="02:02:00:00:00:02" ip4="10.0.0.2" ip4_mask="32" ip6="2001::2" ip6_mask="128"/>
</link> </link>
</links> </links>
<emane_global_configuration>
<emulator>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</emulator>
<core>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
</core>
</emane_global_configuration>
<emane_configurations> <emane_configurations>
<emane_configuration node="3" model="emane_rfpipe"> <emane_configuration node="3" model="emane_rfpipe">
<platform>
<configuration name="antennaprofilemanifesturi" value=""/>
<configuration name="eventservicedevice" value="ctrl0"/>
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
<configuration name="eventservicettl" value="1"/>
<configuration name="otamanagerchannelenable" value="1"/>
<configuration name="otamanagerdevice" value="ctrl0"/>
<configuration name="otamanagergroup" value="224.1.2.8:45702"/>
<configuration name="otamanagerloopback" value="0"/>
<configuration name="otamanagermtu" value="0"/>
<configuration name="otamanagerpartcheckthreshold" value="2"/>
<configuration name="otamanagerparttimeoutthreshold" value="5"/>
<configuration name="otamanagerttl" value="1"/>
<configuration name="stats.event.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxeventcountrows" value="0"/>
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
</platform>
<mac> <mac>
<configuration name="datarate" value="1000000"/> <configuration name="datarate" value="1000000"/>
<configuration name="delay" value="0.000000"/> <configuration name="delay" value="0.000000"/>
@ -75,6 +64,17 @@
</mac> </mac>
<phy> <phy>
<configuration name="bandwidth" value="1000000"/> <configuration name="bandwidth" value="1000000"/>
<configuration name="compatibilitymode" value="1"/>
<configuration name="dopplershiftenable" value="1"/>
<configuration name="excludesamesubidfromfilterenable" value="1"/>
<configuration name="fading.lognormal.dlthresh" value="0.250000"/>
<configuration name="fading.lognormal.dmu" value="5.000000"/>
<configuration name="fading.lognormal.dsigma" value="1.000000"/>
<configuration name="fading.lognormal.duthresh" value="0.750000"/>
<configuration name="fading.lognormal.lmean" value="0.005000"/>
<configuration name="fading.lognormal.lstddev" value="0.001000"/>
<configuration name="fading.lognormal.maxpathloss" value="100.000000"/>
<configuration name="fading.lognormal.minpathloss" value="0.000000"/>
<configuration name="fading.model" value="none"/> <configuration name="fading.model" value="none"/>
<configuration name="fading.nakagami.distance0" value="100.000000"/> <configuration name="fading.nakagami.distance0" value="100.000000"/>
<configuration name="fading.nakagami.distance1" value="250.000000"/> <configuration name="fading.nakagami.distance1" value="250.000000"/>
@ -91,7 +91,10 @@
<configuration name="noisemaxsegmentduration" value="1000000"/> <configuration name="noisemaxsegmentduration" value="1000000"/>
<configuration name="noisemaxsegmentoffset" value="300000"/> <configuration name="noisemaxsegmentoffset" value="300000"/>
<configuration name="noisemode" value="none"/> <configuration name="noisemode" value="none"/>
<configuration name="processingpoolsize" value="0"/>
<configuration name="propagationmodel" value="precomputed"/> <configuration name="propagationmodel" value="precomputed"/>
<configuration name="rxsensitivitypromiscuousmodeenable" value="0"/>
<configuration name="stats.receivepowertableenable" value="1"/>
<configuration name="subid" value="1"/> <configuration name="subid" value="1"/>
<configuration name="systemnoisefigure" value="4.000000"/> <configuration name="systemnoisefigure" value="4.000000"/>
<configuration name="timesyncthreshold" value="10000"/> <configuration name="timesyncthreshold" value="10000"/>
@ -104,7 +107,7 @@
</external> </external>
</emane_configuration> </emane_configuration>
</emane_configurations> </emane_configurations>
<session_origin lat="47.5791667" lon="-122.132322" alt="2.0" scale="150.0"/> <session_origin lat="47.579166412353516" lon="-122.13232421875" alt="2.0" scale="150.0"/>
<session_options> <session_options>
<configuration name="controlnet" value="172.16.0.0/24"/> <configuration name="controlnet" value="172.16.0.0/24"/>
<configuration name="controlnet0" value=""/> <configuration name="controlnet0" value=""/>
@ -117,10 +120,19 @@
<configuration name="enablesdt" value="0"/> <configuration name="enablesdt" value="0"/>
<configuration name="sdturl" value="tcp://127.0.0.1:50000/"/> <configuration name="sdturl" value="tcp://127.0.0.1:50000/"/>
<configuration name="ovs" value="0"/> <configuration name="ovs" value="0"/>
<configuration name="platform_id_start" value="1"/>
<configuration name="nem_id_start" value="1"/>
<configuration name="link_enabled" value="1"/>
<configuration name="loss_threshold" value="30"/>
<configuration name="link_interval" value="1"/>
<configuration name="link_timeout" value="4"/>
<configuration name="mtu" value="0"/>
</session_options> </session_options>
<session_metadata> <session_metadata>
<configuration name="canvas c1" value="{name {Canvas1}}"/> <configuration name="shapes" value="[]"/>
<configuration name="global_options" value="interface_names=no ip_addresses=yes ipv6_addresses=yes node_labels=yes link_labels=yes show_api=no background_images=no annotations=yes grid=yes traffic_start=0"/> <configuration name="edges" value="[]"/>
<configuration name="hidden" value="[]"/>
<configuration name="canvas" value="{&quot;gridlines&quot;: true, &quot;canvases&quot;: [{&quot;id&quot;: 1, &quot;wallpaper&quot;: null, &quot;wallpaper_style&quot;: 1, &quot;fit_image&quot;: false, &quot;dimensions&quot;: [1000, 750]}]}"/>
</session_metadata> </session_metadata>
<default_services> <default_services>
<node type="mdr"> <node type="mdr">

View file

@ -95,10 +95,9 @@
<service name="DefaultRoute"/> <service name="DefaultRoute"/>
</services> </services>
</device> </device>
<device id="14" name="n14" icon="" canvas="0" type="host" class="" image=""> <device id="14" name="n14" icon="" canvas="0" type="PC" class="" image="">
<position x="348.0" y="228.0" lat="47.57709392893491" lon="-122.12763501296686" alt="2.0"/> <position x="348.0" y="228.0" lat="47.57709392893491" lon="-122.12763501296686" alt="2.0"/>
<services> <services>
<service name="SSH"/>
<service name="DefaultRoute"/> <service name="DefaultRoute"/>
</services> </services>
</device> </device>
@ -260,9 +259,5 @@
<service name="OSPFv3"/> <service name="OSPFv3"/>
<service name="IPForward"/> <service name="IPForward"/>
</node> </node>
<node type="host">
<service name="DefaultRoute"/>
<service name="SSH"/>
</node>
</default_services> </default_services>
</scenario> </scenario>

View file

@ -37,6 +37,8 @@ class EmaneModelDialog(Dialog):
self.has_error: bool = False self.has_error: bool = False
try: try:
config = self.node.emane_model_configs.get((self.model, self.iface_id)) config = self.node.emane_model_configs.get((self.model, self.iface_id))
if not config:
config = self.node.emane_model_configs.get((self.model, None))
if not config: if not config:
config = self.app.core.get_emane_model_config( config = self.app.core.get_emane_model_config(
self.node.id, self.model, self.iface_id self.node.id, self.model, self.iface_id

View file

@ -56,7 +56,7 @@ def node_label_positions(
src_x: int, src_y: int, dst_x: int, dst_y: int src_x: int, src_y: int, dst_x: int, dst_y: int
) -> Tuple[Tuple[float, float], Tuple[float, float]]: ) -> Tuple[Tuple[float, float], Tuple[float, float]]:
v_x, v_y = dst_x - src_x, dst_y - src_y v_x, v_y = dst_x - src_x, dst_y - src_y
v_len = math.sqrt(v_x ** 2 + v_y ** 2) v_len = math.sqrt(v_x**2 + v_y**2)
if v_len == 0: if v_len == 0:
u_x, u_y = 0.0, 0.0 u_x, u_y = 0.0, 0.0
else: else:
@ -147,7 +147,7 @@ class Edge:
perp_m = -1 / m perp_m = -1 / m
b = mp_y - (perp_m * mp_x) b = mp_y - (perp_m * mp_x)
# get arc x and y # get arc x and y
offset = math.sqrt(self.arc ** 2 / (1 + (1 / m ** 2))) offset = math.sqrt(self.arc**2 / (1 + (1 / m**2)))
arc_x = mp_x arc_x = mp_x
if self.arc >= 0: if self.arc >= 0:
arc_x += offset arc_x += offset

View file

@ -892,7 +892,7 @@ class CoreNode(CoreNodeBase):
for ip in iface.ips(): for ip in iface.ips():
# ipv4 check # ipv4 check
broadcast = None broadcast = None
if netaddr.valid_ipv4(ip): if netaddr.valid_ipv4(str(ip.ip)):
broadcast = "+" broadcast = "+"
self.node_net_client.create_address(iface.name, str(ip), broadcast) self.node_net_client.create_address(iface.name, str(ip), broadcast)
# configure iface options # configure iface options

View file

@ -5,6 +5,7 @@ from typing import Callable
import netaddr import netaddr
from core import utils
from core.executables import ETHTOOL, IP, OVS_VSCTL, SYSCTL, TC from core.executables import ETHTOOL, IP, OVS_VSCTL, SYSCTL, TC
@ -177,6 +178,7 @@ class LinuxNetClient:
if netaddr.valid_ipv6(address.split("/")[0]): if netaddr.valid_ipv6(address.split("/")[0]):
# IPv6 addresses are removed by default on interface down. # IPv6 addresses are removed by default on interface down.
# Make sure that the IPv6 address we add is not removed # Make sure that the IPv6 address we add is not removed
device = utils.sysctl_devname(device)
self.run(f"{SYSCTL} -w net.ipv6.conf.{device}.keep_addr_on_down=1") self.run(f"{SYSCTL} -w net.ipv6.conf.{device}.keep_addr_on_down=1")
def delete_address(self, device: str, address: str) -> None: def delete_address(self, device: str, address: str) -> None:

View file

@ -647,6 +647,15 @@ class PtpNet(CoreNetwork):
raise CoreError("ptp links support at most 2 network interfaces") raise CoreError("ptp links support at most 2 network interfaces")
super().attach(iface) super().attach(iface)
def startup(self) -> None:
"""
Startup for a p2p node, that disables mac learning after normal startup.
:return: nothing
"""
super().startup()
self.net_client.set_mac_learning(self.brname, LEARNING_DISABLED)
class SwitchNode(CoreNetwork): class SwitchNode(CoreNetwork):
""" """

View file

@ -15,7 +15,7 @@ from core.errors import CoreXmlError
from core.nodes.base import CoreNodeBase, CoreNodeOptions, NodeBase, Position from core.nodes.base import CoreNodeBase, CoreNodeOptions, NodeBase, Position
from core.nodes.docker import DockerNode, DockerOptions from core.nodes.docker import DockerNode, DockerOptions
from core.nodes.interface import CoreInterface from core.nodes.interface import CoreInterface
from core.nodes.lxd import LxcNode from core.nodes.lxd import LxcNode, LxcOptions
from core.nodes.network import CtrlNet, GreTapBridge, PtpNet, WlanNode from core.nodes.network import CtrlNet, GreTapBridge, PtpNet, WlanNode
from core.nodes.wireless import WirelessNode from core.nodes.wireless import WirelessNode
from core.services.coreservices import CoreService from core.services.coreservices import CoreService
@ -825,7 +825,7 @@ class CoreXmlReader:
options.config_services.extend( options.config_services.extend(
x.get("name") for x in config_service_elements.iterchildren() x.get("name") for x in config_service_elements.iterchildren()
) )
if isinstance(options, DockerOptions): if isinstance(options, (DockerOptions, LxcOptions)):
options.image = image options.image = image
# get position information # get position information
position_element = device_element.find("position") position_element = device_element.find("position")

476
daemon/poetry.lock generated
View file

@ -1,11 +1,3 @@
[[package]]
name = "appdirs"
version = "1.4.4"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false
python-versions = "*"
[[package]] [[package]]
name = "atomicwrites" name = "atomicwrites"
version = "1.4.1" version = "1.4.1"
@ -16,17 +8,19 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]] [[package]]
name = "attrs" name = "attrs"
version = "22.1.0" version = "22.2.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.6"
[package.extras] [package.extras]
dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"]
docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] dev = ["attrs[docs,tests]"]
tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"]
tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] tests = ["attrs[tests-no-zope]", "zope.interface"]
tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
tests_no_zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
[[package]] [[package]]
name = "bcrypt" name = "bcrypt"
@ -42,24 +36,29 @@ typecheck = ["mypy"]
[[package]] [[package]]
name = "black" name = "black"
version = "19.3b0" version = "22.12.0"
description = "The uncompromising code formatter." description = "The uncompromising code formatter."
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
appdirs = "*" click = ">=8.0.0"
attrs = ">=18.1.0" mypy-extensions = ">=0.4.3"
click = ">=6.5" pathspec = ">=0.9.0"
toml = ">=0.9.4" platformdirs = ">=2"
tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
[package.extras] [package.extras]
d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.7.4)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
uvloop = ["uvloop (>=0.15.2)"]
[[package]] [[package]]
name = "certifi" name = "certifi"
version = "2022.9.24" version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main" category = "main"
optional = false optional = false
@ -78,34 +77,34 @@ pycparser = "*"
[[package]] [[package]]
name = "cfgv" name = "cfgv"
version = "3.0.0" version = "3.3.1"
description = "Validate configuration and produce human readable error messages." description = "Validate configuration and produce human readable error messages."
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6.1"
[[package]] [[package]]
name = "click" name = "click"
version = "8.0.4" version = "8.1.3"
description = "Composable command line interface toolkit" description = "Composable command line interface toolkit"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""} colorama = {version = "*", markers = "platform_system == \"Windows\""}
[[package]] [[package]]
name = "colorama" name = "colorama"
version = "0.4.5" version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
[[package]] [[package]]
name = "cryptography" name = "cryptography"
version = "38.0.1" version = "39.0.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main" category = "main"
optional = false optional = false
@ -115,12 +114,14 @@ python-versions = ">=3.6"
cffi = ">=1.12" cffi = ">=1.12"
[package.extras] [package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"]
sdist = ["setuptools-rust (>=0.11.4)"] sdist = ["setuptools-rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"] ssh = ["bcrypt (>=3.1.5)"]
test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"]
test-randomorder = ["pytest-randomly"]
tox = ["tox"]
[[package]] [[package]]
name = "distlib" name = "distlib"
@ -149,15 +150,15 @@ testing = ["mock (>=2.0.0,<3.0)"]
[[package]] [[package]]
name = "filelock" name = "filelock"
version = "3.4.1" version = "3.9.0"
description = "A platform independent file lock." description = "A platform independent file lock."
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.extras] [package.extras]
docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"]
testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"]
[[package]] [[package]]
name = "flake8" name = "flake8"
@ -201,26 +202,26 @@ setuptools = "*"
[[package]] [[package]]
name = "identify" name = "identify"
version = "1.6.2" version = "2.5.18"
description = "File identification library for Python" description = "File identification library for Python"
category = "dev" category = "dev"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" python-versions = ">=3.7"
[package.extras] [package.extras]
license = ["editdistance"] license = ["ukkonen"]
[[package]] [[package]]
name = "iniconfig" name = "iniconfig"
version = "1.1.1" version = "2.0.0"
description = "iniconfig: brain-dead simple config-ini parsing" description = "brain-dead simple config-ini parsing"
category = "dev" category = "dev"
optional = false optional = false
python-versions = "*" python-versions = ">=3.7"
[[package]] [[package]]
name = "invoke" name = "invoke"
version = "1.4.1" version = "1.7.3"
description = "Pythonic task execution" description = "Pythonic task execution"
category = "main" category = "main"
optional = false optional = false
@ -272,11 +273,11 @@ testing = ["pytest"]
[[package]] [[package]]
name = "MarkupSafe" name = "MarkupSafe"
version = "2.0.1" version = "2.1.2"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[[package]] [[package]]
name = "mccabe" name = "mccabe"
@ -299,6 +300,14 @@ build = ["blurb", "twine", "wheel"]
docs = ["sphinx"] docs = ["sphinx"]
test = ["pytest", "pytest-cov"] test = ["pytest", "pytest-cov"]
[[package]]
name = "mypy-extensions"
version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
category = "dev"
optional = false
python-versions = ">=3.5"
[[package]] [[package]]
name = "netaddr" name = "netaddr"
version = "0.7.19" version = "0.7.19"
@ -309,42 +318,40 @@ python-versions = "*"
[[package]] [[package]]
name = "nodeenv" name = "nodeenv"
version = "1.6.0" version = "1.7.0"
description = "Node.js virtual environment builder" description = "Node.js virtual environment builder"
category = "dev" category = "dev"
optional = false optional = false
python-versions = "*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
[package.dependencies]
setuptools = "*"
[[package]] [[package]]
name = "packaging" name = "packaging"
version = "21.3" version = "23.0"
description = "Core utilities for Python packages" description = "Core utilities for Python packages"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7"
[[package]]
name = "paramiko"
version = "3.0.0"
description = "SSH2 protocol library"
category = "main"
optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
[package.dependencies] [package.dependencies]
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" bcrypt = ">=3.2"
cryptography = ">=3.3"
[[package]] pynacl = ">=1.5"
name = "paramiko"
version = "2.11.0"
description = "SSH2 protocol library"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
bcrypt = ">=3.1.3"
cryptography = ">=2.5"
pynacl = ">=1.0.1"
six = "*"
[package.extras] [package.extras]
all = ["bcrypt (>=3.1.3)", "gssapi (>=1.4.1)", "invoke (>=1.3)", "pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "pywin32 (>=2.1.8)"] all = ["gssapi (>=1.4.1)", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"]
ed25519 = ["bcrypt (>=3.1.3)", "pynacl (>=1.0.1)"]
gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"]
invoke = ["invoke (>=1.3)"] invoke = ["invoke (>=2.0)"]
[[package]] [[package]]
name = "pathlib2" name = "pathlib2"
@ -357,6 +364,14 @@ python-versions = "*"
[package.dependencies] [package.dependencies]
six = "*" six = "*"
[[package]]
name = "pathspec"
version = "0.11.0"
description = "Utility library for gitignore style pattern matching of file paths."
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]] [[package]]
name = "Pillow" name = "Pillow"
version = "9.2.0" version = "9.2.0"
@ -371,15 +386,15 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
[[package]] [[package]]
name = "platformdirs" name = "platformdirs"
version = "2.4.0" version = "3.0.0"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.extras] [package.extras]
docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"]
test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
[[package]] [[package]]
name = "pluggy" name = "pluggy"
@ -464,17 +479,6 @@ cffi = ">=1.4.1"
docs = ["sphinx (>=1.6.5)", "sphinx_rtd_theme"] docs = ["sphinx (>=1.6.5)", "sphinx_rtd_theme"]
tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"]
[[package]]
name = "pyparsing"
version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
[[package]] [[package]]
name = "pyproj" name = "pyproj"
version = "3.3.1" version = "3.3.1"
@ -517,15 +521,16 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "59.6.0" version = "67.4.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.extras] [package.extras]
docs = ["furo", "jaraco.packaging (>=8.2)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
testing = ["flake8-2020", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "paver", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-virtualenv (>=1.2.7)", "pytest-xdist", "sphinx", "virtualenv (>=13.0.0)", "wheel"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
[[package]] [[package]]
name = "six" name = "six"
@ -543,39 +548,51 @@ category = "dev"
optional = false optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]]
name = "typing-extensions"
version = "4.5.0"
description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]] [[package]]
name = "virtualenv" name = "virtualenv"
version = "20.16.5" version = "20.19.0"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
distlib = ">=0.3.5,<1" distlib = ">=0.3.6,<1"
filelock = ">=3.4.1,<4" filelock = ">=3.4.1,<4"
platformdirs = ">=2.4,<3" platformdirs = ">=2.4,<4"
[package.extras] [package.extras]
docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)", "sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"]
testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.9" python-versions = "^3.9"
content-hash = "c2b34d6cfc645c88a200c8be6ae2e4077ce65947f370df55012b26fbadd645e1" content-hash = "b78118206a714bae7b839da039024e850a1fee06d2768acd6f452490de4abb0e"
[metadata.files] [metadata.files]
appdirs = [
{file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
atomicwrites = [ atomicwrites = [
{file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
] ]
attrs = [ attrs = [
{file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"},
{file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"},
] ]
bcrypt = [ bcrypt = [
{file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"},
@ -601,12 +618,22 @@ bcrypt = [
{file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"},
] ]
black = [ black = [
{file = "black-19.3b0-py36-none-any.whl", hash = "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf"}, {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"},
{file = "black-19.3b0.tar.gz", hash = "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"}, {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"},
{file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"},
{file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"},
{file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"},
{file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"},
{file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"},
{file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"},
{file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"},
{file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"},
{file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"},
{file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"},
] ]
certifi = [ certifi = [
{file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
{file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
] ]
cffi = [ cffi = [
{file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
@ -675,44 +702,41 @@ cffi = [
{file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
] ]
cfgv = [ cfgv = [
{file = "cfgv-3.0.0-py2.py3-none-any.whl", hash = "sha256:f22b426ed59cd2ab2b54ff96608d846c33dfb8766a67f0b4a6ce130ce244414f"}, {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
{file = "cfgv-3.0.0.tar.gz", hash = "sha256:04b093b14ddf9fd4d17c53ebfd55582d27b76ed30050193c14e560770c5360eb"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
] ]
click = [ click = [
{file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
{file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
] ]
colorama = [ colorama = [
{file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
] ]
cryptography = [ cryptography = [
{file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f"}, {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965"},
{file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad"}, {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f"},
{file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6"}, {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106"},
{file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a"}, {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c"},
{file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294"}, {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4"},
{file = "cryptography-38.0.1-cp36-abi3-win32.whl", hash = "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0"}, {file = "cryptography-39.0.1-cp36-abi3-win32.whl", hash = "sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8"},
{file = "cryptography-38.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a"}, {file = "cryptography-39.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac"},
{file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad"},
{file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef"},
{file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885"},
{file = "cryptography-38.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388"},
{file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336"},
{file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2"},
{file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e"},
{file = "cryptography-38.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0"},
{file = "cryptography-38.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6"},
{file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a"},
{file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb"}, {file = "cryptography-39.0.1.tar.gz", hash = "sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695"},
{file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a"},
{file = "cryptography-38.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b"},
{file = "cryptography-38.0.1.tar.gz", hash = "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7"},
] ]
distlib = [ distlib = [
{file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"},
@ -723,8 +747,8 @@ fabric = [
{file = "fabric-2.7.1.tar.gz", hash = "sha256:76f8fef59cf2061dbd849bbce4fe49bdd820884385004b0ca59136ac3db129e4"}, {file = "fabric-2.7.1.tar.gz", hash = "sha256:76f8fef59cf2061dbd849bbce4fe49bdd820884385004b0ca59136ac3db129e4"},
] ]
filelock = [ filelock = [
{file = "filelock-3.4.1-py3-none-any.whl", hash = "sha256:a4bc51381e01502a30e9f06dd4fa19a1712eab852b6fb0f84fd7cce0793d8ca3"}, {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"},
{file = "filelock-3.4.1.tar.gz", hash = "sha256:0f12f552b42b5bf60dba233710bf71337d35494fc8bdd4fd6d9f6d082ad45e06"}, {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"},
] ]
flake8 = [ flake8 = [
{file = "flake8-3.8.2-py2.py3-none-any.whl", hash = "sha256:ccaa799ef9893cebe69fdfefed76865aeaefbb94cb8545617b2298786a4de9a5"}, {file = "flake8-3.8.2-py2.py3-none-any.whl", hash = "sha256:ccaa799ef9893cebe69fdfefed76865aeaefbb94cb8545617b2298786a4de9a5"},
@ -825,17 +849,16 @@ grpcio-tools = [
{file = "grpcio_tools-1.49.1-cp39-cp39-win_amd64.whl", hash = "sha256:1efa0c221c719433f441ac0e026fc3c4dbc9a1a08a552ecdc707775e2f2fbbae"}, {file = "grpcio_tools-1.49.1-cp39-cp39-win_amd64.whl", hash = "sha256:1efa0c221c719433f441ac0e026fc3c4dbc9a1a08a552ecdc707775e2f2fbbae"},
] ]
identify = [ identify = [
{file = "identify-1.6.2-py2.py3-none-any.whl", hash = "sha256:8f9879b5b7cca553878d31548a419ec2f227d3328da92fe8202bc5e546d5cbc3"}, {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"},
{file = "identify-1.6.2.tar.gz", hash = "sha256:1c2014f6985ed02e62b2e6955578acf069cb2c54859e17853be474bfe7e13bed"}, {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"},
] ]
iniconfig = [ iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
] ]
invoke = [ invoke = [
{file = "invoke-1.4.1-py2-none-any.whl", hash = "sha256:93e12876d88130c8e0d7fd6618dd5387d6b36da55ad541481dfa5e001656f134"}, {file = "invoke-1.7.3-py3-none-any.whl", hash = "sha256:d9694a865764dd3fd91f25f7e9a97fb41666e822bbb00e670091e3f43933574d"},
{file = "invoke-1.4.1-py3-none-any.whl", hash = "sha256:87b3ef9d72a1667e104f89b159eaf8a514dbf2f3576885b2bbdefe74c3fb2132"}, {file = "invoke-1.7.3.tar.gz", hash = "sha256:41b428342d466a82135d5ab37119685a989713742be46e42a3a399d685579314"},
{file = "invoke-1.4.1.tar.gz", hash = "sha256:de3f23bfe669e3db1085789fd859eb8ca8e0c5d9c20811e2407fa042e8a5e15d"},
] ]
isort = [ isort = [
{file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"},
@ -918,75 +941,56 @@ Mako = [
{file = "Mako-1.2.3.tar.gz", hash = "sha256:7fde96466fcfeedb0eed94f187f20b23d85e4cb41444be0e542e2c8c65c396cd"}, {file = "Mako-1.2.3.tar.gz", hash = "sha256:7fde96466fcfeedb0eed94f187f20b23d85e4cb41444be0e542e2c8c65c396cd"},
] ]
MarkupSafe = [ MarkupSafe = [
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"},
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"},
{file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"},
{file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"},
{file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"},
{file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"},
{file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"},
{file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
{file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
{file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
{file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
] ]
mccabe = [ mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
@ -996,26 +1000,34 @@ mock = [
{file = "mock-4.0.2-py3-none-any.whl", hash = "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0"}, {file = "mock-4.0.2-py3-none-any.whl", hash = "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0"},
{file = "mock-4.0.2.tar.gz", hash = "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72"}, {file = "mock-4.0.2.tar.gz", hash = "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72"},
] ]
mypy-extensions = [
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
]
netaddr = [ netaddr = [
{file = "netaddr-0.7.19-py2.py3-none-any.whl", hash = "sha256:56b3558bd71f3f6999e4c52e349f38660e54a7a8a9943335f73dfc96883e08ca"}, {file = "netaddr-0.7.19-py2.py3-none-any.whl", hash = "sha256:56b3558bd71f3f6999e4c52e349f38660e54a7a8a9943335f73dfc96883e08ca"},
{file = "netaddr-0.7.19.tar.gz", hash = "sha256:38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd"}, {file = "netaddr-0.7.19.tar.gz", hash = "sha256:38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd"},
] ]
nodeenv = [ nodeenv = [
{file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"},
{file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"},
] ]
packaging = [ packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"},
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"},
] ]
paramiko = [ paramiko = [
{file = "paramiko-2.11.0-py2.py3-none-any.whl", hash = "sha256:655f25dc8baf763277b933dfcea101d636581df8d6b9774d1fb653426b72c270"}, {file = "paramiko-3.0.0-py3-none-any.whl", hash = "sha256:6bef55b882c9d130f8015b9a26f4bd93f710e90fe7478b9dcc810304e79b3cd8"},
{file = "paramiko-2.11.0.tar.gz", hash = "sha256:003e6bee7c034c21fbb051bf83dc0a9ee4106204dd3c53054c71452cc4ec3938"}, {file = "paramiko-3.0.0.tar.gz", hash = "sha256:fedc9b1dd43bc1d45f67f1ceca10bc336605427a46dcdf8dec6bfea3edf57965"},
] ]
pathlib2 = [ pathlib2 = [
{file = "pathlib2-2.3.7.post1-py2.py3-none-any.whl", hash = "sha256:5266a0fd000452f1b3467d782f079a4343c63aaa119221fbdc4e39577489ca5b"}, {file = "pathlib2-2.3.7.post1-py2.py3-none-any.whl", hash = "sha256:5266a0fd000452f1b3467d782f079a4343c63aaa119221fbdc4e39577489ca5b"},
{file = "pathlib2-2.3.7.post1.tar.gz", hash = "sha256:9fe0edad898b83c0c3e199c842b27ed216645d2e177757b2dd67384d4113c641"}, {file = "pathlib2-2.3.7.post1.tar.gz", hash = "sha256:9fe0edad898b83c0c3e199c842b27ed216645d2e177757b2dd67384d4113c641"},
] ]
pathspec = [
{file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"},
{file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"},
]
Pillow = [ Pillow = [
{file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"},
{file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"},
@ -1077,8 +1089,8 @@ Pillow = [
{file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"},
] ]
platformdirs = [ platformdirs = [
{file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"},
{file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"},
] ]
pluggy = [ pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@ -1132,10 +1144,6 @@ PyNaCl = [
{file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"},
{file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"},
] ]
pyparsing = [
{file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyproj = [ pyproj = [
{file = "pyproj-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:473961faef7a9fd723c5d432f65220ea6ab3854e606bf84b4d409a75a4261c78"}, {file = "pyproj-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:473961faef7a9fd723c5d432f65220ea6ab3854e606bf84b4d409a75a4261c78"},
{file = "pyproj-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07c9d8d7ec009bbac09e233cfc725601586fe06880e5538a3a44eaf560ba3a62"}, {file = "pyproj-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07c9d8d7ec009bbac09e233cfc725601586fe06880e5538a3a44eaf560ba3a62"},
@ -1191,8 +1199,8 @@ PyYAML = [
{file = "PyYAML-5.4.tar.gz", hash = "sha256:3c49e39ac034fd64fd576d63bb4db53cda89b362768a67f07749d55f128ac18a"}, {file = "PyYAML-5.4.tar.gz", hash = "sha256:3c49e39ac034fd64fd576d63bb4db53cda89b362768a67f07749d55f128ac18a"},
] ]
setuptools = [ setuptools = [
{file = "setuptools-59.6.0-py3-none-any.whl", hash = "sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e"}, {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"},
{file = "setuptools-59.6.0.tar.gz", hash = "sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373"}, {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"},
] ]
six = [ six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@ -1202,7 +1210,15 @@ toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
] ]
virtualenv = [ tomli = [
{file = "virtualenv-20.16.5-py3-none-any.whl", hash = "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27"}, {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{file = "virtualenv-20.16.5.tar.gz", hash = "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
typing-extensions = [
{file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
{file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
]
virtualenv = [
{file = "virtualenv-20.19.0-py3-none-any.whl", hash = "sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1"},
{file = "virtualenv-20.19.0.tar.gz", hash = "sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590"},
] ]

View file

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "core" name = "core"
version = "9.0.1" version = "9.0.2"
description = "CORE Common Open Research Emulator" description = "CORE Common Open Research Emulator"
authors = ["Boeing Research and Technology"] authors = ["Boeing Research and Technology"]
license = "BSD-2-Clause" license = "BSD-2-Clause"
@ -27,7 +27,7 @@ core-cleanup = "core.scripts.cleanup:main"
python = "^3.9" python = "^3.9"
fabric = "2.7.1" fabric = "2.7.1"
grpcio = "1.49.1" grpcio = "1.49.1"
invoke = "1.4.1" invoke = "1.7.3"
lxml = "4.9.1" lxml = "4.9.1"
netaddr = "0.7.19" netaddr = "0.7.19"
protobuf = "4.21.9" protobuf = "4.21.9"
@ -36,17 +36,15 @@ pyyaml = "5.4"
Pillow = "9.2.0" Pillow = "9.2.0"
Mako = "1.2.3" Mako = "1.2.3"
[tool.poetry.dev-dependencies] [tool.poetry.group.dev.dependencies]
black = "==19.3b0" pytest = "6.2.5"
grpcio-tools = "1.49.1"
black = "22.12.0"
flake8 = "3.8.2" flake8 = "3.8.2"
isort = "4.3.21" isort = "4.3.21"
mock = "4.0.2" mock = "4.0.2"
pre-commit = "2.1.1" pre-commit = "2.1.1"
[tool.poetry.group.dev.dependencies]
pytest = "6.2.5"
grpcio-tools = "1.49.1"
[tool.isort] [tool.isort]
skip_glob = "*_pb2*.py,doc,build" skip_glob = "*_pb2*.py,doc,build"
multi_line_output = 3 multi_line_output = 3

View file

@ -9,7 +9,7 @@ class TestUtils:
no_args = "()" no_args = "()"
one_arg = "('one',)" one_arg = "('one',)"
two_args = "('one', 'two')" two_args = "('one', 'two')"
unicode_args = u"('one', 'two', 'three')" unicode_args = "('one', 'two', 'three')"
# when # when
no_args = utils.make_tuple_fromstr(no_args, str) no_args = utils.make_tuple_fromstr(no_args, str)

View file

@ -2,40 +2,51 @@
FROM centos:7 FROM centos:7
LABEL Description="CORE Docker CentOS Image" LABEL Description="CORE Docker CentOS Image"
# define variables
ARG PREFIX=/usr ARG PREFIX=/usr
ARG BRANCH=master ARG BRANCH=master
# define environment
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG en_US.UTF-8 ENV LANG en_US.UTF-8
ARG PROTOC_VERSION=3.19.6
ARG VENV_PATH=/opt/core/venv
ENV PATH="$PATH:${VENV_PATH}/bin"
WORKDIR /opt
# install basic dependencies # install system dependencies
RUN yum -y update && \ RUN yum -y update && \
yum install -y git sudo wget tzdata unzip yum install -y \
git \
sudo \
wget \
tzdata \
unzip \
libpcap-devel \
libpcre3-devel \
libxml2-devel \
protobuf-devel \
unzip \
uuid-devel \
tcpdump \
make && \
yum-builddep -y python3 && \
yum autoremove -y
# install python3.9 # install python3.9
WORKDIR /opt RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz tar xf Python-3.9.15.tgz && \
RUN tar xf Python-3.9.15.tgz cd Python-3.9.15 && \
RUN yum install -y make && yum-builddep -y python3 ./configure --enable-optimizations --with-ensurepip=install && \
RUN cd Python-3.9.15 && \ make -j$(nproc) altinstall && \
./configure --enable-optimizations --with-ensurepip=install && \ python3.9 -m pip install --upgrade pip && \
make -j$(nproc) altinstall cd /opt && \
RUN python3.9 -m pip install --upgrade pip rm -rf Python-3.9.15
# install core # install core
WORKDIR /opt RUN git clone https://github.com/coreemu/core && \
RUN git clone https://github.com/coreemu/core cd core && \
WORKDIR /opt/core git checkout ${BRANCH} && \
RUN git checkout ${BRANCH} PYTHON=/usr/local/bin/python3.9 ./setup.sh && \
RUN PYTHON=/usr/local/bin/python3.9 ./setup.sh . /root/.bashrc && PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
RUN . /root/.bashrc && PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
ENV PATH "$PATH:/opt/core/venv/bin"
# install emane # install emane
RUN yum install -y libpcap-devel libpcre3-devel libxml2-devel protobuf-devel unzip uuid-devel
WORKDIR /opt
RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \ RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \
tar xf emane-1.3.3-release-1.el7.x86_64.tar.gz && \ tar xf emane-1.3.3-release-1.el7.x86_64.tar.gz && \
cd emane-1.3.3-release-1/rpms/el7/x86_64 && \ cd emane-1.3.3-release-1/rpms/el7/x86_64 && \
@ -45,18 +56,21 @@ RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x
rm emane-1.3.3-release-1.el7.x86_64.tar.gz && \ rm emane-1.3.3-release-1.el7.x86_64.tar.gz && \
rm -rf emane-1.3.3-release-1 rm -rf emane-1.3.3-release-1
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \ # install emane python bindings
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip && \
mkdir protoc && \ mkdir protoc && \
unzip protoc-3.19.6-linux-x86_64.zip -d protoc unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
RUN git clone https://github.com/adjacentlink/emane.git git clone https://github.com/adjacentlink/emane.git && \
RUN PATH=/opt/protoc/bin:$PATH && \ cd emane && \
cd emane && \ git checkout v1.3.3 && \
git checkout v1.3.3 && \ ./autogen.sh && \
./autogen.sh && \ PYTHON=${VENV_PATH}/bin/python ./configure --prefix=/usr && \
PYTHON=/opt/core/venv/bin/python ./configure --prefix=/usr && \ cd src/python && \
cd src/python && \ PATH=/opt/protoc/bin:$PATH make && \
make && \ ${VENV_PATH}/bin/python -m pip install . && \
/opt/core/venv/bin/python -m pip install . cd /opt && \
rm -rf protoc && \
rm -rf emane && \
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
# run daemon WORKDIR /root
CMD ["core-daemon"]

View file

@ -2,40 +2,64 @@
FROM centos:7 FROM centos:7
LABEL Description="CORE CentOS Image" LABEL Description="CORE CentOS Image"
ENV LANG en_US.UTF-8
ARG PROTOC_VERSION=3.19.6
ARG VENV_PATH=/opt/core/venv
ENV PATH="$PATH:${VENV_PATH}/bin"
WORKDIR /opt
# install basic dependencies # install basic dependencies
RUN yum update -y && yum install -y wget RUN yum -y update && \
yum install -y \
git \
sudo \
wget \
tzdata \
unzip \
libpcap-devel \
libpcre3-devel \
libxml2-devel \
protobuf-devel \
unzip \
uuid-devel \
tcpdump \
automake \
gawk \
libreadline-devel \
libtool \
pkg-config \
make && \
yum-builddep -y python3 && \
yum autoremove -y
# install python3.9 # install python3.9
WORKDIR /opt RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz tar xf Python-3.9.15.tgz && \
RUN tar xf Python-3.9.15.tgz cd Python-3.9.15 && \
RUN yum install -y make && yum-builddep -y python3 ./configure --enable-optimizations --with-ensurepip=install && \
RUN cd Python-3.9.15 && \ make -j$(nproc) altinstall && \
./configure --enable-optimizations --with-ensurepip=install && \ python3.9 -m pip install --upgrade pip && \
make -j$(nproc) altinstall cd /opt && \
RUN python3.9 -m pip install --upgrade pip rm -rf Python-3.9.15
# install core # install core
WORKDIR /opt/core
COPY core_*.rpm . COPY core_*.rpm .
RUN PYTHON=/usr/local/bin/python3.9 yum install -y ./core_*.rpm RUN PYTHON=/usr/local/bin/python3.9 yum install -y ./core_*.rpm && \
ENV PATH "$PATH:/opt/core/venv/bin" rm -f core_*.rpm
# install ospf mdr # install ospf mdr
RUN yum install -y automake gawk git libreadline-devel libtool pkg-config RUN git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git && \
WORKDIR /opt cd ospf-mdr && \
RUN git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git ./bootstrap.sh && \
RUN cd ospf-mdr && \ ./configure --disable-doc --enable-user=root --enable-group=root \
./bootstrap.sh && \ --with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
./configure --disable-doc --enable-user=root --enable-group=root \ --localstatedir=/var/run/quagga && \
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \ make -j$(nproc) && \
--localstatedir=/var/run/quagga && \ make install && \
make -j$(nproc) && \ cd /opt && \
make install rm -rf ospf-mdr
# install emane # install emane
RUN yum install -y libpcap-devel libpcre3-devel libxml2-devel protobuf-devel unzip uuid-devel
WORKDIR /opt
RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \ RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \
tar xf emane-1.3.3-release-1.el7.x86_64.tar.gz && \ tar xf emane-1.3.3-release-1.el7.x86_64.tar.gz && \
cd emane-1.3.3-release-1/rpms/el7/x86_64 && \ cd emane-1.3.3-release-1/rpms/el7/x86_64 && \
@ -44,15 +68,20 @@ RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x
cd ../../../.. && \ cd ../../../.. && \
rm emane-1.3.3-release-1.el7.x86_64.tar.gz && \ rm emane-1.3.3-release-1.el7.x86_64.tar.gz && \
rm -rf emane-1.3.3-release-1 rm -rf emane-1.3.3-release-1
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \
# install emane python bindings
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip && \
mkdir protoc && \ mkdir protoc && \
unzip protoc-3.19.6-linux-x86_64.zip -d protoc unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
RUN git clone https://github.com/adjacentlink/emane.git git clone https://github.com/adjacentlink/emane.git && \
RUN PATH=/opt/protoc/bin:$PATH && \ cd emane && \
cd emane && \ git checkout v1.3.3 && \
git checkout v1.3.3 && \ ./autogen.sh && \
./autogen.sh && \ PYTHON=${VENV_PATH}/bin/python ./configure --prefix=/usr && \
PYTHON=/opt/core/venv/bin/python ./configure --prefix=/usr && \ cd src/python && \
cd src/python && \ PATH=/opt/protoc/bin:$PATH make && \
make && \ ${VENV_PATH}/bin/python -m pip install . && \
/opt/core/venv/bin/python -m pip install . cd /opt && \
rm -rf protoc && \
rm -rf emane && \
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip

View file

@ -2,43 +2,61 @@
FROM ubuntu:22.04 FROM ubuntu:22.04
LABEL Description="CORE Docker Ubuntu Image" LABEL Description="CORE Docker Ubuntu Image"
# define variables
ARG PREFIX=/usr/local ARG PREFIX=/usr/local
ARG BRANCH=master ARG BRANCH=master
ARG PROTOC_VERSION=3.19.6
# define environment ARG VENV_PATH=/opt/core/venv
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV PATH="$PATH:${VENV_PATH}/bin"
WORKDIR /opt
# install basic dependencies # install system dependencies
RUN apt-get update && \ RUN apt-get update -y && \
apt-get install -y git sudo wget tzdata apt-get install -y --no-install-recommends \
ca-certificates \
git \
sudo \
wget \
tzdata \
libpcap-dev \
libpcre3-dev \
libprotobuf-dev \
libxml2-dev \
protobuf-compiler \
unzip \
uuid-dev \
iproute2 \
iputils-ping \
tcpdump && \
apt-get autoremove -y
# install core # install core
WORKDIR /opt RUN git clone https://github.com/coreemu/core && \
RUN git clone https://github.com/coreemu/core cd core && \
WORKDIR /opt/core git checkout ${BRANCH} && \
RUN git checkout ${BRANCH} ./setup.sh && \
RUN ./setup.sh . /root/.bashrc && \
RUN . /root/.bashrc && inv install -v -p ${PREFIX} inv install -v -p ${PREFIX} && \
ENV PATH "$PATH:/opt/core/venv/bin" cd /opt && \
rm -rf ospf-mdr
# install emane # install emane
RUN apt-get install -y libpcap-dev libpcre3-dev libprotobuf-dev libxml2-dev protobuf-compiler unzip uuid-dev RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip && \
WORKDIR /opt
RUN git clone https://github.com/adjacentlink/emane.git
RUN cd emane && \
./autogen.sh && \
./configure --prefix=/usr && \
make -j$(nproc) && \
make install
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \
mkdir protoc && \ mkdir protoc && \
unzip protoc-3.19.6-linux-x86_64.zip -d protoc unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
RUN PATH=/opt/protoc/bin:$PATH && \ git clone https://github.com/adjacentlink/emane.git && \
cd emane/src/python && \ cd emane && \
make clean && \ ./autogen.sh && \
make ./configure --prefix=/usr && \
RUN /opt/core/venv/bin/python -m pip install emane/src/python make -j$(nproc) && \
make install && \
cd src/python && \
make clean && \
PATH=/opt/protoc/bin:$PATH make && \
${VENV_PATH}/bin/python -m pip install . && \
cd /opt && \
rm -rf protoc && \
rm -rf emane && \
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
# run daemon WORKDIR /root
CMD ["core-daemon"]

View file

@ -2,45 +2,74 @@
FROM ubuntu:22.04 FROM ubuntu:22.04
LABEL Description="CORE Docker Ubuntu Image" LABEL Description="CORE Docker Ubuntu Image"
# define environment
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ARG PROTOC_VERSION=3.19.6
ARG VENV_PATH=/opt/core/venv
ENV PATH="$PATH:${VENV_PATH}/bin"
WORKDIR /opt
# install basic dependencies # install basic dependencies
RUN apt-get update && apt-get install -y python3 python3-tk python3-pip python3-venv RUN apt-get update -y && \
RUN python3 -m pip install --upgrade pip apt-get install -y --no-install-recommends \
ca-certificates \
python3 \
python3-tk \
python3-pip \
python3-venv \
libpcap-dev \
libpcre3-dev \
libprotobuf-dev \
libxml2-dev \
protobuf-compiler \
unzip \
uuid-dev \
automake \
gawk \
git \
wget \
libreadline-dev \
libtool \
pkg-config \
g++ \
make \
iputils-ping \
tcpdump && \
apt-get autoremove -y
# install core # install core
WORKDIR /opt/core
COPY core_*.deb . COPY core_*.deb .
RUN apt-get install -y ./core_*.deb RUN apt-get install -y ./core_*.deb && \
ENV PATH "$PATH:/opt/core/venv/bin" rm -f core_*.deb
# install ospf mdr # install ospf mdr
RUN apt-get install -y automake gawk git libreadline-dev libtool pkg-config RUN git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git && \
WORKDIR /opt cd ospf-mdr && \
RUN git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git ./bootstrap.sh && \
RUN cd ospf-mdr && \ ./configure --disable-doc --enable-user=root --enable-group=root \
./bootstrap.sh && \ --with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
./configure --disable-doc --enable-user=root --enable-group=root \ --localstatedir=/var/run/quagga && \
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \ make -j$(nproc) && \
--localstatedir=/var/run/quagga && \ make install && \
make -j$(nproc) && \ cd /opt && \
make install rm -rf ospf-mdr
# install emane # install emane
RUN apt-get install -y libpcap-dev libpcre3-dev libprotobuf-dev libxml2-dev protobuf-compiler unzip uuid-dev RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip && \
WORKDIR /opt
RUN git clone https://github.com/adjacentlink/emane.git
RUN cd emane && \
./autogen.sh && \
./configure --prefix=/usr && \
make -j$(nproc) && \
make install
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \
mkdir protoc && \ mkdir protoc && \
unzip protoc-3.19.6-linux-x86_64.zip -d protoc unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
RUN PATH=/opt/protoc/bin:$PATH && \ git clone https://github.com/adjacentlink/emane.git && \
cd emane/src/python && \ cd emane && \
make clean && \ ./autogen.sh && \
make ./configure --prefix=/usr && \
RUN /opt/core/venv/bin/python -m pip install emane/src/python make -j$(nproc) && \
make install && \
cd src/python && \
make clean && \
PATH=/opt/protoc/bin:$PATH make && \
${VENV_PATH}/bin/python -m pip install . && \
cd /opt && \
rm -rf protoc && \
rm -rf emane && \
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
WORKDIR /root

View file

@ -54,9 +54,6 @@ conveniently run tests, etc.
# run core-daemon # run core-daemon
sudo core-daemon sudo core-daemon
# run python gui
core-pygui
# run gui # run gui
core-gui core-gui

View file

@ -60,7 +60,7 @@ You can find more detailed tutorials and examples at the
Every topic below assumes CORE, EMANE, and OSPF MDR have been installed. Every topic below assumes CORE, EMANE, and OSPF MDR have been installed.
> **WARNING:** demo files will be found within the new `core-pygui` > **WARNING:** demo files will be found within the new `core-gui`
| Topic | Model | Description | | Topic | Model | Description |
|--------------------------------------|---------|-----------------------------------------------------------| |--------------------------------------|---------|-----------------------------------------------------------|

View file

@ -391,7 +391,7 @@ file_configs[file_name] = "echo hello world"
## File Examples ## File Examples
File versions of the network examples can be found File versions of the network examples can be found
[here](https://github.com/coreemu/core/tree/master/daemon/examples/grpc). [here](https://github.com/coreemu/core/tree/master/package/examples/grpc).
These examples will create a session using the gRPC API when the core-daemon is running. These examples will create a session using the gRPC API when the core-daemon is running.
You can then switch to and attach to these sessions using either of the CORE GUIs. You can then switch to and attach to these sessions using either of the CORE GUIs.

View file

@ -62,7 +62,7 @@ The GUI will create a directory in your home directory on first run called
## Modes of Operation ## Modes of Operation
The CORE GUI has two primary modes of operation, **Edit** and **Execute** The CORE GUI has two primary modes of operation, **Edit** and **Execute**
modes. Running the GUI, by typing **core-pygui** with no options, starts in modes. Running the GUI, by typing **core-gui** with no options, starts in
Edit mode. Nodes are drawn on a blank canvas using the toolbar on the left Edit mode. Nodes are drawn on a blank canvas using the toolbar on the left
and configured from right-click menus or by double-clicking them. The GUI and configured from right-click menus or by double-clicking them. The GUI
does not need to be run as root. does not need to be run as root.

View file

@ -265,15 +265,59 @@ information can be found [here](https://github.com/adjacentlink/emane/wiki/Insta
There is an invoke task to help install the EMANE bindings into the CORE virtual There is an invoke task to help install the EMANE bindings into the CORE virtual
environment, when needed. An example for running the task is below and the version environment, when needed. An example for running the task is below and the version
provided should match the version of the packages installed. provided should match the version of the packages installed.
You will also need to make sure, you are providing the correct python binary where CORE
is being used.
Also, these EMANE bindings need to be built using `protoc` 3.19+. So make sure
that is available and being picked up on PATH properly.
Examples for building and installing EMANE python bindings for use in CORE:
```shell ```shell
# if your system does not have protoc 3.19+
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip
mkdir protoc
unzip protoc-3.19.6-linux-x86_64.zip -d protoc
git clone https://github.com/adjacentlink/emane.git
cd emane
git checkout v1.3.3
./autogen.sh
PYTHON=/opt/core/venv/bin/python ./configure --prefix=/usr
cd src/python
PATH=/opt/protoc/bin:$PATH make
/opt/core/venv/bin/python -m pip install .
# when your system has protoc 3.19+
cd <CORE_REPO> cd <CORE_REPO>
# example version tag v1.3.3 # example version tag v1.3.3
inv install-emane -e <emane version tag> # overriding python used to leverage the default virtualenv install
PYTHON=/opt/core/venv/bin/python inv install-emane -e <version tag>
# local install that uses whatever python3 refers to
inv install-emane -e <version tag>
``` ```
## Post Install ## Post Install
After installation completes you are now ready to run CORE. After installation completes you are now ready to run CORE.
### Resolving Docker Issues
If you have Docker installed, by default it will change the iptables
forwarding chain to drop packets, which will cause issues for CORE traffic.
You can temporarily resolve the issue with the following command:
```shell
sudo iptables --policy FORWARD ACCEPT
```
Alternatively, you can configure Docker to avoid doing this, but will likely
break normal Docker networking usage. Using the setting below will require
a restart.
Place the file contents below in **/etc/docker/docker.json**
```json
{
"iptables": false
}
```
### Resolving Path Issues ### Resolving Path Issues
One problem running CORE you may run into, using the virtual environment or locally One problem running CORE you may run into, using the virtual environment or locally
can be issues related to your path. can be issues related to your path.

View file

@ -414,7 +414,7 @@ session.services.set_service_file(
## File Examples ## File Examples
File versions of the network examples can be found File versions of the network examples can be found
[here](https://github.com/coreemu/core/tree/master/daemon/examples/python). [here](https://github.com/coreemu/core/tree/master/package/examples/python).
## Executing Scripts from GUI ## Executing Scripts from GUI
@ -435,6 +435,6 @@ The example below has a fallback to a new CoreEmu object, in the case you would
like to run the script standalone, outside of the core-daemon. like to run the script standalone, outside of the core-daemon.
```python ```python
coreemu = globals().get("coreemu", CoreEmu()) coreemu = globals().get("coreemu") or CoreEmu()
session = coreemu.create_session() session = coreemu.create_session()
``` ```

View file

@ -5,9 +5,20 @@
## Overview ## Overview
The [BIRD Internet Routing Daemon](https://bird.network.cz/) is a routing daemon; i.e., a software responsible for managing kernel packet forwarding tables. It aims to develop a dynamic IP routing daemon with full support of all modern routing protocols, easy to use configuration interface and powerful route filtering language, primarily targeted on (but not limited to) Linux and other UNIX-like systems and distributed under the GNU General Public License. BIRD has a free implementation of several well known and common routing and router-supplemental protocols, namely RIP, RIPng, OSPFv2, OSPFv3, BGP, BFD, and NDP/RA. BIRD supports IPv4 and IPv6 address families, Linux kernel and several BSD variants (tested on FreeBSD, NetBSD and OpenBSD). BIRD consists of bird daemon and birdc interactive CLI client used for supervision. The [BIRD Internet Routing Daemon](https://bird.network.cz/) is a routing
daemon; i.e., a software responsible for managing kernel packet forwarding
tables. It aims to develop a dynamic IP routing daemon with full support of
all modern routing protocols, easy to use configuration interface and powerful
route filtering language, primarily targeted on (but not limited to) Linux and
other UNIX-like systems and distributed under the GNU General Public License.
BIRD has a free implementation of several well known and common routing and
router-supplemental protocols, namely RIP, RIPng, OSPFv2, OSPFv3, BGP, BFD,
and NDP/RA. BIRD supports IPv4 and IPv6 address families, Linux kernel and
several BSD variants (tested on FreeBSD, NetBSD and OpenBSD). BIRD consists
of bird daemon and birdc interactive CLI client used for supervision.
In order to be able to use the BIRD Internet Routing Protocol, you must first install the project on your machine. In order to be able to use the BIRD Internet Routing Protocol, you must first
install the project on your machine.
## BIRD Package Install ## BIRD Package Install
@ -17,7 +28,8 @@ sudo apt-get install bird
## BIRD Source Code Install ## BIRD Source Code Install
You can download BIRD source code from it's [official repository.](https://gitlab.labs.nic.cz/labs/bird/) You can download BIRD source code from its
[official repository.](https://gitlab.labs.nic.cz/labs/bird/)
```shell ```shell
./configure ./configure
make make
@ -25,6 +37,10 @@ su
make install make install
vi /etc/bird/bird.conf vi /etc/bird/bird.conf
``` ```
The installation will place the bird directory inside */etc* where you will also find its config file. The installation will place the bird directory inside */etc* where you will
also find its config file.
In order to be able to do use the Bird Internet Routing Protocol, you must modify *bird.conf* due to the fact that the given configuration file is not configured beyond allowing the bird daemon to start, which means that nothing else will happen if you run it. Keeran Marquis has a very detailed example on [Configuring BGP using Bird on Ubuntu](https://blog.marquis.co/configuring-bgp-using-bird-on-ubuntu-14-04lts/) which can be used as a building block to implement your custom routing daemon. In order to be able to do use the Bird Internet Routing Protocol, you must
modify *bird.conf* due to the fact that the given configuration file is not
configured beyond allowing the bird daemon to start, which means that nothing
else will happen if you run it.

View file

@ -71,7 +71,7 @@ sudo cp pki/dh.pem $KEYDIR/dh1024.pem
Add VPNServer service to nodes desired for running an OpenVPN server. Add VPNServer service to nodes desired for running an OpenVPN server.
Modify [sampleVPNServer](../../daemon/examples/services/sampleVPNServer) for the following Modify [sampleVPNServer](https://github.com/coreemu/core/blob/master/package/examples/services/sampleVPNServer) for the following
* Edit keydir key/cert directory * Edit keydir key/cert directory
* Edit keyname to use generated server name above * Edit keyname to use generated server name above
* Edit vpnserver to match an address that the server node will have * Edit vpnserver to match an address that the server node will have
@ -80,7 +80,7 @@ Modify [sampleVPNServer](../../daemon/examples/services/sampleVPNServer) for the
Add VPNClient service to nodes desired for acting as an OpenVPN client. Add VPNClient service to nodes desired for acting as an OpenVPN client.
Modify [sampleVPNClient](../../daemon/examples/services/sampleVPNClient) for the following Modify [sampleVPNClient](https://github.com/coreemu/core/blob/master/package/examples/services/sampleVPNClient) for the following
* Edit keydir key/cert directory * Edit keydir key/cert directory
* Edit keyname to use generated client name above * Edit keyname to use generated client name above
* Edit vpnserver to match the address a server was configured to use * Edit vpnserver to match the address a server was configured to use

View file

@ -216,7 +216,7 @@ def install_poetry(c: Context, dev: bool, local: bool, hide: bool) -> None:
c.run("poetry build -f wheel", hide=hide) c.run("poetry build -f wheel", hide=hide)
c.run(f"sudo {python_bin} -m pip install dist/*") c.run(f"sudo {python_bin} -m pip install dist/*")
else: else:
args = "" if dev else "--no-dev" args = "" if dev else "--only main"
with c.cd(DAEMON_DIR): with c.cd(DAEMON_DIR):
c.run("sudo mkdir -p /opt/core", hide=hide) c.run("sudo mkdir -p /opt/core", hide=hide)
c.run(f"sudo {python_bin} -m venv {VENV_PATH}") c.run(f"sudo {python_bin} -m venv {VENV_PATH}")
@ -310,7 +310,6 @@ def install_core_files(c, local=False, verbose=False, prefix=DEFAULT_PREFIX):
@task( @task(
help={ help={
"dev": "install development mode",
"verbose": "enable verbose", "verbose": "enable verbose",
"install-type": "used to force an install type, " "install-type": "used to force an install type, "
"can be one of the following (redhat, debian)", "can be one of the following (redhat, debian)",