commit
c44dc521fb
35 changed files with 1070 additions and 703 deletions
20
CHANGELOG.md
20
CHANGELOG.md
|
@ -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
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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():
|
||||||
|
|
|
@ -1,62 +1,62 @@
|
||||||
<?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>
|
<emane_configurations>
|
||||||
<emulator>
|
<emane_configuration node="1" model="emane_rfpipe">
|
||||||
<configuration name="antennaprofilemanifesturi" value="/tmp/emane/antennaprofile.xml"/>
|
<platform>
|
||||||
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
|
<configuration name="antennaprofilemanifesturi" value=""/>
|
||||||
<configuration name="eventservicedevice" value="ctrl0"/>
|
<configuration name="eventservicedevice" value="ctrl0"/>
|
||||||
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<configuration name="eventservicettl" value="1"/>
|
<configuration name="eventservicettl" value="1"/>
|
||||||
|
@ -71,61 +71,7 @@
|
||||||
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
||||||
</emulator>
|
</platform>
|
||||||
<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_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">
|
|
||||||
<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="{"gridlines": true, "canvases": [{"id": 1, "wallpaper": null, "wallpaper_style": 1, "fit_image": false, "dimensions": [1000, 750]}]}"/>
|
||||||
</session_metadata>
|
</session_metadata>
|
||||||
<default_services>
|
<default_services>
|
||||||
<node type="mdr">
|
<node type="mdr">
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
<?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>
|
<emane_configurations>
|
||||||
<emulator>
|
<emane_configuration node="3" model="emane_rfpipe">
|
||||||
|
<platform>
|
||||||
<configuration name="antennaprofilemanifesturi" value=""/>
|
<configuration name="antennaprofilemanifesturi" value=""/>
|
||||||
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
|
|
||||||
<configuration name="eventservicedevice" value="ctrl0"/>
|
<configuration name="eventservicedevice" value="ctrl0"/>
|
||||||
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<configuration name="eventservicettl" value="1"/>
|
<configuration name="eventservicettl" value="1"/>
|
||||||
|
@ -49,18 +49,7 @@
|
||||||
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
||||||
</emulator>
|
</platform>
|
||||||
<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_configuration node="3" model="emane_rfpipe">
|
|
||||||
<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="{"gridlines": true, "canvases": [{"id": 1, "wallpaper": null, "wallpaper_style": 1, "fit_image": false, "dimensions": [1000, 750]}]}"/>
|
||||||
</session_metadata>
|
</session_metadata>
|
||||||
<default_services>
|
<default_services>
|
||||||
<node type="mdr">
|
<node type="mdr">
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
<?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>
|
<emane_configurations>
|
||||||
<emulator>
|
<emane_configuration node="3" model="emane_rfpipe">
|
||||||
|
<platform>
|
||||||
<configuration name="antennaprofilemanifesturi" value=""/>
|
<configuration name="antennaprofilemanifesturi" value=""/>
|
||||||
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
|
|
||||||
<configuration name="eventservicedevice" value="ctrl0"/>
|
<configuration name="eventservicedevice" value="ctrl0"/>
|
||||||
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<configuration name="eventservicettl" value="1"/>
|
<configuration name="eventservicettl" value="1"/>
|
||||||
|
@ -49,18 +49,7 @@
|
||||||
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
||||||
</emulator>
|
</platform>
|
||||||
<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_configuration node="3" model="emane_rfpipe">
|
|
||||||
<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="{"gridlines": true, "canvases": [{"id": 1, "wallpaper": null, "wallpaper_style": 1, "fit_image": false, "dimensions": [1000, 750]}]}"/>
|
||||||
</session_metadata>
|
</session_metadata>
|
||||||
<default_services>
|
<default_services>
|
||||||
<node type="mdr">
|
<node type="mdr">
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
<?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>
|
<emane_configurations>
|
||||||
<emulator>
|
<emane_configuration node="3" model="emane_rfpipe">
|
||||||
|
<platform>
|
||||||
<configuration name="antennaprofilemanifesturi" value=""/>
|
<configuration name="antennaprofilemanifesturi" value=""/>
|
||||||
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
|
|
||||||
<configuration name="eventservicedevice" value="ctrl0"/>
|
<configuration name="eventservicedevice" value="ctrl0"/>
|
||||||
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<configuration name="eventservicettl" value="1"/>
|
<configuration name="eventservicettl" value="1"/>
|
||||||
|
@ -49,18 +49,7 @@
|
||||||
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
||||||
</emulator>
|
</platform>
|
||||||
<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_configuration node="3" model="emane_rfpipe">
|
|
||||||
<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="{"gridlines": true, "canvases": [{"id": 1, "wallpaper": null, "wallpaper_style": 1, "fit_image": false, "dimensions": [1000, 750]}]}"/>
|
||||||
</session_metadata>
|
</session_metadata>
|
||||||
<default_services>
|
<default_services>
|
||||||
<node type="mdr">
|
<node type="mdr">
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
<?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>
|
<emane_configurations>
|
||||||
<emulator>
|
<emane_configuration node="3" model="emane_rfpipe">
|
||||||
|
<platform>
|
||||||
<configuration name="antennaprofilemanifesturi" value=""/>
|
<configuration name="antennaprofilemanifesturi" value=""/>
|
||||||
<configuration name="controlportendpoint" value="0.0.0.0:47000"/>
|
|
||||||
<configuration name="eventservicedevice" value="ctrl0"/>
|
<configuration name="eventservicedevice" value="ctrl0"/>
|
||||||
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
<configuration name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<configuration name="eventservicettl" value="1"/>
|
<configuration name="eventservicettl" value="1"/>
|
||||||
|
@ -49,18 +49,7 @@
|
||||||
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
<configuration name="stats.event.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
<configuration name="stats.ota.maxeventcountrows" value="0"/>
|
||||||
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
<configuration name="stats.ota.maxpacketcountrows" value="0"/>
|
||||||
</emulator>
|
</platform>
|
||||||
<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_configuration node="3" model="emane_rfpipe">
|
|
||||||
<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="{"gridlines": true, "canvases": [{"id": 1, "wallpaper": null, "wallpaper_style": 1, "fit_image": false, "dimensions": [1000, 750]}]}"/>
|
||||||
</session_metadata>
|
</session_metadata>
|
||||||
<default_services>
|
<default_services>
|
||||||
<node type="mdr">
|
<node type="mdr">
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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
476
daemon/poetry.lock
generated
|
@ -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"},
|
||||||
]
|
]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
|
||||||
RUN cd Python-3.9.15 && \
|
|
||||||
./configure --enable-optimizations --with-ensurepip=install && \
|
./configure --enable-optimizations --with-ensurepip=install && \
|
||||||
make -j$(nproc) altinstall
|
make -j$(nproc) altinstall && \
|
||||||
RUN python3.9 -m pip install --upgrade pip
|
python3.9 -m pip install --upgrade pip && \
|
||||||
|
cd /opt && \
|
||||||
|
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=/opt/core/venv/bin/python ./configure --prefix=/usr && \
|
PYTHON=${VENV_PATH}/bin/python ./configure --prefix=/usr && \
|
||||||
cd src/python && \
|
cd src/python && \
|
||||||
make && \
|
PATH=/opt/protoc/bin:$PATH make && \
|
||||||
/opt/core/venv/bin/python -m pip install .
|
${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"]
|
|
||||||
|
|
|
@ -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
|
|
||||||
RUN cd Python-3.9.15 && \
|
|
||||||
./configure --enable-optimizations --with-ensurepip=install && \
|
./configure --enable-optimizations --with-ensurepip=install && \
|
||||||
make -j$(nproc) altinstall
|
make -j$(nproc) altinstall && \
|
||||||
RUN python3.9 -m pip install --upgrade pip
|
python3.9 -m pip install --upgrade pip && \
|
||||||
|
cd /opt && \
|
||||||
|
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
|
|
||||||
RUN cd ospf-mdr && \
|
|
||||||
./bootstrap.sh && \
|
./bootstrap.sh && \
|
||||||
./configure --disable-doc --enable-user=root --enable-group=root \
|
./configure --disable-doc --enable-user=root --enable-group=root \
|
||||||
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
|
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
|
||||||
--localstatedir=/var/run/quagga && \
|
--localstatedir=/var/run/quagga && \
|
||||||
make -j$(nproc) && \
|
make -j$(nproc) && \
|
||||||
make install
|
make install && \
|
||||||
|
cd /opt && \
|
||||||
|
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=/opt/core/venv/bin/python ./configure --prefix=/usr && \
|
PYTHON=${VENV_PATH}/bin/python ./configure --prefix=/usr && \
|
||||||
cd src/python && \
|
cd src/python && \
|
||||||
make && \
|
PATH=/opt/protoc/bin:$PATH make && \
|
||||||
/opt/core/venv/bin/python -m pip install .
|
${VENV_PATH}/bin/python -m pip install . && \
|
||||||
|
cd /opt && \
|
||||||
|
rm -rf protoc && \
|
||||||
|
rm -rf emane && \
|
||||||
|
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
|
||||||
|
|
|
@ -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
|
mkdir protoc && \
|
||||||
RUN git clone https://github.com/adjacentlink/emane.git
|
unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
|
||||||
RUN cd emane && \
|
git clone https://github.com/adjacentlink/emane.git && \
|
||||||
|
cd emane && \
|
||||||
./autogen.sh && \
|
./autogen.sh && \
|
||||||
./configure --prefix=/usr && \
|
./configure --prefix=/usr && \
|
||||||
make -j$(nproc) && \
|
make -j$(nproc) && \
|
||||||
make install
|
make install && \
|
||||||
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \
|
cd src/python && \
|
||||||
mkdir protoc && \
|
|
||||||
unzip protoc-3.19.6-linux-x86_64.zip -d protoc
|
|
||||||
RUN PATH=/opt/protoc/bin:$PATH && \
|
|
||||||
cd emane/src/python && \
|
|
||||||
make clean && \
|
make clean && \
|
||||||
make
|
PATH=/opt/protoc/bin:$PATH make && \
|
||||||
RUN /opt/core/venv/bin/python -m pip install emane/src/python
|
${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"]
|
|
||||||
|
|
|
@ -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
|
|
||||||
RUN cd ospf-mdr && \
|
|
||||||
./bootstrap.sh && \
|
./bootstrap.sh && \
|
||||||
./configure --disable-doc --enable-user=root --enable-group=root \
|
./configure --disable-doc --enable-user=root --enable-group=root \
|
||||||
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
|
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
|
||||||
--localstatedir=/var/run/quagga && \
|
--localstatedir=/var/run/quagga && \
|
||||||
make -j$(nproc) && \
|
make -j$(nproc) && \
|
||||||
make install
|
make install && \
|
||||||
|
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
|
mkdir protoc && \
|
||||||
RUN git clone https://github.com/adjacentlink/emane.git
|
unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d protoc && \
|
||||||
RUN cd emane && \
|
git clone https://github.com/adjacentlink/emane.git && \
|
||||||
|
cd emane && \
|
||||||
./autogen.sh && \
|
./autogen.sh && \
|
||||||
./configure --prefix=/usr && \
|
./configure --prefix=/usr && \
|
||||||
make -j$(nproc) && \
|
make -j$(nproc) && \
|
||||||
make install
|
make install && \
|
||||||
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip && \
|
cd src/python && \
|
||||||
mkdir protoc && \
|
|
||||||
unzip protoc-3.19.6-linux-x86_64.zip -d protoc
|
|
||||||
RUN PATH=/opt/protoc/bin:$PATH && \
|
|
||||||
cd emane/src/python && \
|
|
||||||
make clean && \
|
make clean && \
|
||||||
make
|
PATH=/opt/protoc/bin:$PATH make && \
|
||||||
RUN /opt/core/venv/bin/python -m pip install emane/src/python
|
${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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 |
|
||||||
|--------------------------------------|---------|-----------------------------------------------------------|
|
|--------------------------------------|---------|-----------------------------------------------------------|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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()
|
||||||
```
|
```
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
3
tasks.py
3
tasks.py
|
@ -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)",
|
||||||
|
|
Loading…
Reference in a new issue