Merge branch 'rel/5.1' into core-future
This commit is contained in:
commit
8f0364c44b
13 changed files with 58 additions and 33 deletions
|
@ -9,7 +9,10 @@ from core.emane import emanemodel
|
||||||
try:
|
try:
|
||||||
from emane.events.commeffectevent import CommEffectEvent
|
from emane.events.commeffectevent import CommEffectEvent
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.info("emane 1.2.1 not found")
|
try:
|
||||||
|
from emanesh.events.commeffectevent import CommEffectEvent
|
||||||
|
except ImportError:
|
||||||
|
logger.warn("compatible emane python bindings not installed")
|
||||||
|
|
||||||
|
|
||||||
def convert_none(x):
|
def convert_none(x):
|
||||||
|
|
|
@ -34,7 +34,12 @@ try:
|
||||||
from emane.events import LocationEvent
|
from emane.events import LocationEvent
|
||||||
from emane.events.eventserviceexception import EventServiceException
|
from emane.events.eventserviceexception import EventServiceException
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.info("emane 1.2.1 not found")
|
try:
|
||||||
|
from emanesh.events import EventService
|
||||||
|
from emanesh.events import LocationEvent
|
||||||
|
from emanesh.events.eventserviceexception import EventServiceException
|
||||||
|
except ImportError:
|
||||||
|
logger.warn("compatible emane python bindings not installed")
|
||||||
|
|
||||||
EMANE_MODELS = [
|
EMANE_MODELS = [
|
||||||
EmaneRfPipeModel,
|
EmaneRfPipeModel,
|
||||||
|
@ -76,7 +81,7 @@ class EmaneManager(ConfigurableManager):
|
||||||
self.transformport = self.session.get_config_item_int("emane_transform_port", 8200)
|
self.transformport = self.session.get_config_item_int("emane_transform_port", 8200)
|
||||||
self.doeventloop = False
|
self.doeventloop = False
|
||||||
self.eventmonthread = None
|
self.eventmonthread = None
|
||||||
self.logversion()
|
|
||||||
# model for global EMANE configuration options
|
# model for global EMANE configuration options
|
||||||
self.emane_config = EmaneGlobalModel(session, None)
|
self.emane_config = EmaneGlobalModel(session, None)
|
||||||
session.broker.handlers.add(self.handledistributed)
|
session.broker.handlers.add(self.handledistributed)
|
||||||
|
@ -86,24 +91,28 @@ class EmaneManager(ConfigurableManager):
|
||||||
self.emane_config.name: self.emane_config
|
self.emane_config.name: self.emane_config
|
||||||
}
|
}
|
||||||
|
|
||||||
# load provided models
|
|
||||||
self.load_models(EMANE_MODELS)
|
|
||||||
|
|
||||||
# load custom models
|
|
||||||
custom_models_path = session.config.get("emane_models_dir")
|
|
||||||
if custom_models_path:
|
|
||||||
emane_models = utils.load_classes(custom_models_path, EmaneModel)
|
|
||||||
self.load_models(emane_models)
|
|
||||||
|
|
||||||
self.service = None
|
self.service = None
|
||||||
|
self.emane_check()
|
||||||
|
|
||||||
def logversion(self):
|
def emane_check(self):
|
||||||
"""
|
"""
|
||||||
Log the installed EMANE version.
|
Check if emane is installed and load models.
|
||||||
|
|
||||||
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
# check for emane
|
||||||
emane_version = utils.check_cmd(["emane", "--version"])
|
emane_version = utils.check_cmd(["emane", "--version"])
|
||||||
logger.info("using EMANE: %s", emane_version)
|
logger.info("using EMANE: %s", emane_version)
|
||||||
|
|
||||||
|
# load default emane models
|
||||||
|
self.load_models(EMANE_MODELS)
|
||||||
|
|
||||||
|
# load custom models
|
||||||
|
custom_models_path = self.session.config.get("emane_models_dir")
|
||||||
|
if custom_models_path:
|
||||||
|
emane_models = utils.load_classes(custom_models_path, EmaneModel)
|
||||||
|
self.load_models(emane_models)
|
||||||
except CoreCommandError:
|
except CoreCommandError:
|
||||||
logger.info("emane is not installed")
|
logger.info("emane is not installed")
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
from core import logger
|
from core import logger
|
||||||
from core.enumerations import ConfigDataTypes
|
from core.enumerations import ConfigDataTypes
|
||||||
|
|
||||||
|
manifest = None
|
||||||
try:
|
try:
|
||||||
from emane.shell import manifest
|
from emane.shell import manifest
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.info("emane 1.2.1 not found")
|
try:
|
||||||
|
from emanesh import manifest
|
||||||
|
except ImportError:
|
||||||
|
logger.warn("compatible emane python bindings not installed")
|
||||||
|
|
||||||
|
|
||||||
def _type_value(config_type):
|
def _type_value(config_type):
|
||||||
|
@ -77,6 +81,10 @@ def parse(manifest_path, defaults):
|
||||||
:rtype: list
|
:rtype: list
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# no results when emane bindings are not present
|
||||||
|
if not manifest:
|
||||||
|
return []
|
||||||
|
|
||||||
# load configuration file
|
# load configuration file
|
||||||
manifest_file = manifest.Manifest(manifest_path)
|
manifest_file = manifest.Manifest(manifest_path)
|
||||||
manifest_configurations = manifest_file.getAllConfiguration()
|
manifest_configurations = manifest_file.getAllConfiguration()
|
||||||
|
|
|
@ -15,7 +15,10 @@ from core.enumerations import RegisterTlvs
|
||||||
try:
|
try:
|
||||||
from emane.events import LocationEvent
|
from emane.events import LocationEvent
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.info("emane 1.2.1 not found")
|
try:
|
||||||
|
from emanesh.events import LocationEvent
|
||||||
|
except ImportError:
|
||||||
|
logger.warn("compatible emane python bindings not installed")
|
||||||
|
|
||||||
|
|
||||||
class EmaneNet(PyCoreNet):
|
class EmaneNet(PyCoreNet):
|
||||||
|
|
|
@ -72,6 +72,8 @@ class ServiceManager(object):
|
||||||
"""
|
"""
|
||||||
services = utils.load_classes(path, CoreService)
|
services = utils.load_classes(path, CoreService)
|
||||||
for service in services:
|
for service in services:
|
||||||
|
if not service._name:
|
||||||
|
continue
|
||||||
service.on_load()
|
service.on_load()
|
||||||
cls.add(service)
|
cls.add(service)
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ class BirdService(CoreService):
|
||||||
common to Bird's routing daemons.
|
common to Bird's routing daemons.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_name = "BirdDaemon"
|
_name = None
|
||||||
_group = "BIRD"
|
_group = "BIRD"
|
||||||
_depends = ("bird",)
|
_depends = ("bird",)
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
|
@ -13,7 +13,7 @@ class NrlService(CoreService):
|
||||||
Parent class for NRL services. Defines properties and methods
|
Parent class for NRL services. Defines properties and methods
|
||||||
common to NRL's routing daemons.
|
common to NRL's routing daemons.
|
||||||
"""""
|
"""""
|
||||||
_name = "Protean"
|
_name = None
|
||||||
_group = "ProtoSvc"
|
_group = "ProtoSvc"
|
||||||
_depends = ()
|
_depends = ()
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
|
@ -222,7 +222,7 @@ class QuaggaService(CoreService):
|
||||||
Parent class for Quagga services. Defines properties and methods
|
Parent class for Quagga services. Defines properties and methods
|
||||||
common to Quagga's routing daemons.
|
common to Quagga's routing daemons.
|
||||||
"""
|
"""
|
||||||
_name = "QuaggaDaemon"
|
_name = None
|
||||||
_group = "Quagga"
|
_group = "Quagga"
|
||||||
_depends = ("zebra",)
|
_depends = ("zebra",)
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
|
@ -11,7 +11,7 @@ class SdnService(CoreService):
|
||||||
"""
|
"""
|
||||||
Parent class for SDN services.
|
Parent class for SDN services.
|
||||||
"""
|
"""
|
||||||
_name = "SdnProcess"
|
_name = None
|
||||||
_group = "SDN"
|
_group = "SDN"
|
||||||
_depends = ()
|
_depends = ()
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
|
@ -16,7 +16,7 @@ class UtilService(CoreService):
|
||||||
"""
|
"""
|
||||||
Parent class for utility services.
|
Parent class for utility services.
|
||||||
"""
|
"""
|
||||||
_name = "UtilityProcess"
|
_name = None
|
||||||
_group = "Utility"
|
_group = "Utility"
|
||||||
_depends = ()
|
_depends = ()
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
|
@ -74,7 +74,7 @@ class XorpService(CoreService):
|
||||||
Parent class for XORP services. Defines properties and methods
|
Parent class for XORP services. Defines properties and methods
|
||||||
common to XORP's routing daemons.
|
common to XORP's routing daemons.
|
||||||
"""
|
"""
|
||||||
_name = "XorpDaemon"
|
_name = None
|
||||||
_group = "XORP"
|
_group = "XORP"
|
||||||
_depends = ("xorp_rtrmgr",)
|
_depends = ("xorp_rtrmgr",)
|
||||||
_dirs = ()
|
_dirs = ()
|
||||||
|
|
20
gui/wlan.tcl
20
gui/wlan.tcl
|
@ -68,7 +68,7 @@ proc findWlanNodes { peer } {
|
||||||
#
|
#
|
||||||
# Returns 1 if the given interface is wireless
|
# Returns 1 if the given interface is wireless
|
||||||
proc isIfcWireless { node ifc } {
|
proc isIfcWireless { node ifc } {
|
||||||
if { $ifc == "wireless" } {
|
if { $ifc == "wireless" } {
|
||||||
# wireless peudo-interface
|
# wireless peudo-interface
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ proc clearWlanLinks { wlan } {
|
||||||
proc updateRangeCircles { wlan range } {
|
proc updateRangeCircles { wlan range } {
|
||||||
global .c zoom g_selected_model
|
global .c zoom g_selected_model
|
||||||
set c .c
|
set c .c
|
||||||
|
|
||||||
set radius [expr {$zoom * $range/2}]
|
set radius [expr {$zoom * $range/2}]
|
||||||
$c delete -withtag rangecircles
|
$c delete -withtag rangecircles
|
||||||
if { $radius == 0 } {
|
if { $radius == 0 } {
|
||||||
|
@ -171,7 +171,7 @@ proc getWlanColor { wlan } {
|
||||||
if {[nodeType $node] != "wlan"} {
|
if {[nodeType $node] != "wlan"} {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if {$node == $wlan} {
|
if {$node == $wlan} {
|
||||||
return [lindex $wlanLinkColors $colornum]
|
return [lindex $wlanLinkColors $colornum]
|
||||||
}
|
}
|
||||||
incr colornum
|
incr colornum
|
||||||
|
@ -180,7 +180,7 @@ proc getWlanColor { wlan } {
|
||||||
# default color
|
# default color
|
||||||
return [lindex $wlanLinkColors 0]
|
return [lindex $wlanLinkColors 0]
|
||||||
}
|
}
|
||||||
|
|
||||||
# move a node given incremental coordinates
|
# move a node given incremental coordinates
|
||||||
# dx dy should be adjusted for zoom
|
# dx dy should be adjusted for zoom
|
||||||
proc moveNodeIncr { c node dx dy } {
|
proc moveNodeIncr { c node dx dy } {
|
||||||
|
@ -389,7 +389,7 @@ proc wlanConfigDialogHelper { wi target apply } {
|
||||||
|
|
||||||
# use default model/values when none configured for this node
|
# use default model/values when none configured for this node
|
||||||
if { $mobmodel == "" } {
|
if { $mobmodel == "" } {
|
||||||
set mobmodel $DEFAULT_WLAN_MODEL
|
set mobmodel $DEFAULT_WLAN_MODEL
|
||||||
set vals $DEFAULT_WLAN_MODEL_VALS
|
set vals $DEFAULT_WLAN_MODEL_VALS
|
||||||
# look for customized range/bw/jitter/delay/per
|
# look for customized range/bw/jitter/delay/per
|
||||||
} else {
|
} else {
|
||||||
|
@ -473,7 +473,7 @@ proc wlanConfigDialogHelper { wi target apply } {
|
||||||
-side left -padx 4 -pady 4
|
-side left -padx 4 -pady 4
|
||||||
pack $de -side top -anchor w -padx 4 -pady 4
|
pack $de -side top -anchor w -padx 4 -pady 4
|
||||||
|
|
||||||
# jitter frame
|
# jitter frame
|
||||||
set jt $wi.wl.note.basic.jt
|
set jt $wi.wl.note.basic.jt
|
||||||
ttk::frame $jt
|
ttk::frame $jt
|
||||||
ttk::label $jt.label1 -anchor w -text "Jitter (us):"
|
ttk::label $jt.label1 -anchor w -text "Jitter (us):"
|
||||||
|
@ -528,7 +528,7 @@ proc wlanConfigDialogHelper { wi target apply } {
|
||||||
}
|
}
|
||||||
if { ! $have_emane_models } {
|
if { ! $have_emane_models } {
|
||||||
# show connection dialog box to indicate why there are no EMANE models
|
# show connection dialog box to indicate why there are no EMANE models
|
||||||
$mod.none configure -text "none - connection to CORE daemon required!" \
|
$mod.none configure -text "Please install EMANE" \
|
||||||
-width "45"
|
-width "45"
|
||||||
after 500 {
|
after 500 {
|
||||||
update ;# allow dialog layout, otherwise strange results
|
update ;# allow dialog layout, otherwise strange results
|
||||||
|
@ -608,16 +608,16 @@ proc wlanConfigDialogHelper { wi target apply } {
|
||||||
set cmd "linkSelectedNodes $target"
|
set cmd "linkSelectedNodes $target"
|
||||||
button $wi.bottom.memb -text "Choose WLAN members" \
|
button $wi.bottom.memb -text "Choose WLAN members" \
|
||||||
-command "popupSelectNodes \"$msg\" \"\" {$cmd}"
|
-command "popupSelectNodes \"$msg\" \"\" {$cmd}"
|
||||||
|
|
||||||
# layout items
|
# layout items
|
||||||
|
|
||||||
pack $wi.bottom.ipv4.addrl $wi.bottom.ipv4.addrv -side left
|
pack $wi.bottom.ipv4.addrl $wi.bottom.ipv4.addrv -side left
|
||||||
pack $wi.bottom.ipv4 -side top -anchor w
|
pack $wi.bottom.ipv4 -side top -anchor w
|
||||||
pack $wi.bottom.ipv6.addrl $wi.bottom.ipv6.addrv -side left
|
pack $wi.bottom.ipv6.addrl $wi.bottom.ipv6.addrv -side left
|
||||||
pack $wi.bottom.ipv6 -side top -anchor w
|
pack $wi.bottom.ipv6 -side top -anchor w
|
||||||
pack $wi.bottom.script $wi.bottom.linkall $wi.bottom.memb \
|
pack $wi.bottom.script $wi.bottom.linkall $wi.bottom.memb \
|
||||||
-side left -anchor center
|
-side left -anchor center
|
||||||
|
|
||||||
pack $wi.bottom -side top -anchor w
|
pack $wi.bottom -side top -anchor w
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
NAME=`basename $0`
|
NAME=`basename $0`
|
||||||
PIDFILE="@CORE_STATE_DIR@/run/$NAME.pid"
|
PIDFILE="@CORE_STATE_DIR@/run/$NAME.pid"
|
||||||
LOG="@CORE_STATE_DIR@/log/$NAME.log"
|
LOG="@CORE_STATE_DIR@/log/$NAME.log"
|
||||||
CMD="PYTHON_PATH=@pythondir@ @PYTHON@ @bindir@/$NAME"
|
CMD="PYTHONPATH=@pythondir@ @PYTHON@ @bindir@/$NAME"
|
||||||
|
|
||||||
get_pid() {
|
get_pid() {
|
||||||
cat "$PIDFILE"
|
cat "$PIDFILE"
|
||||||
|
|
Loading…
Reference in a new issue