Merge branch 'master' of https://github.com/coreemu/core
This commit is contained in:
commit
1b8c195c75
13 changed files with 255 additions and 50 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
||||||
|
.debbuild
|
||||||
.deps
|
.deps
|
||||||
|
.rpmbuild
|
||||||
.version
|
.version
|
||||||
.version.date
|
.version.date
|
||||||
Makefile
|
Makefile
|
||||||
|
@ -11,5 +13,6 @@ config.h.in
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
configure
|
configure
|
||||||
|
core-*.tar.gz
|
||||||
debian
|
debian
|
||||||
stamp-h1
|
stamp-h1
|
||||||
|
|
|
@ -198,15 +198,6 @@ if test "x$enable_daemon" = "xyes" ; then
|
||||||
AC_CHECK_FUNCS([atexit dup2 gettimeofday memset socket strerror uname])
|
AC_CHECK_FUNCS([atexit dup2 gettimeofday memset socket strerror uname])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# simple architecture detection
|
|
||||||
if test `uname -m` = "x86_64"; then
|
|
||||||
ARCH=amd64
|
|
||||||
else
|
|
||||||
ARCH=i386
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT([using architecture $ARCH])
|
|
||||||
AC_SUBST(ARCH)
|
|
||||||
|
|
||||||
# Host-specific detection
|
# Host-specific detection
|
||||||
want_linux_netns=no
|
want_linux_netns=no
|
||||||
want_bsd=no
|
want_bsd=no
|
||||||
|
|
|
@ -45,8 +45,8 @@ class Emane(ConfigurableManager):
|
||||||
(SUCCESS, NOT_NEEDED, NOT_READY) = (0, 1, 2)
|
(SUCCESS, NOT_NEEDED, NOT_READY) = (0, 1, 2)
|
||||||
EVENTCFGVAR = 'LIBEMANEEVENTSERVICECONFIG'
|
EVENTCFGVAR = 'LIBEMANEEVENTSERVICECONFIG'
|
||||||
# possible self.version values
|
# possible self.version values
|
||||||
(EMANEUNK, EMANE074, EMANE081, EMANE091, EMANE092, EMANE093) = \
|
(EMANEUNK, EMANE074, EMANE081, EMANE091, EMANE092, EMANE093, EMANE101) = \
|
||||||
(0, 7, 8, 91, 92, 93)
|
(0, 7, 8, 91, 92, 93, 101)
|
||||||
DEFAULT_LOG_LEVEL = 3
|
DEFAULT_LOG_LEVEL = 3
|
||||||
|
|
||||||
def __init__(self, session):
|
def __init__(self, session):
|
||||||
|
@ -746,7 +746,7 @@ class Emane(ConfigurableManager):
|
||||||
'''
|
'''
|
||||||
for n in sorted(self._objs.keys()):
|
for n in sorted(self._objs.keys()):
|
||||||
emanenode = self._objs[n]
|
emanenode = self._objs[n]
|
||||||
nems = emanenode.buildnemxmlfiles(self)
|
emanenode.buildnemxmlfiles(self)
|
||||||
|
|
||||||
def appendtransporttonem(self, doc, nem, nodenum, ifc=None):
|
def appendtransporttonem(self, doc, nem, nodenum, ifc=None):
|
||||||
''' Given a nem XML node and EMANE WLAN node number, append
|
''' Given a nem XML node and EMANE WLAN node number, append
|
||||||
|
@ -1175,6 +1175,8 @@ def emane_version():
|
||||||
v = Emane.EMANE092
|
v = Emane.EMANE092
|
||||||
elif result.startswith('0.9.3'):
|
elif result.startswith('0.9.3'):
|
||||||
v = Emane.EMANE093
|
v = Emane.EMANE093
|
||||||
|
elif result.startswith('1.0.1'):
|
||||||
|
v = Emane.EMANE101
|
||||||
return v, result.strip()
|
return v, result.strip()
|
||||||
|
|
||||||
# set version variables for the Emane class
|
# set version variables for the Emane class
|
||||||
|
|
|
@ -124,8 +124,8 @@ class EmaneRfPipeModel(EmaneModel):
|
||||||
values = list(values)
|
values = list(values)
|
||||||
values[i] = self.emane074_fixup(values[i], 1000)
|
values[i] = self.emane074_fixup(values[i], 1000)
|
||||||
# append MAC options to macdoc
|
# append MAC options to macdoc
|
||||||
map( lambda n: mac.appendChild(e.xmlparam(macdoc, n, \
|
map(lambda n: mac.appendChild(e.xmlparam(macdoc, n, \
|
||||||
self.valueof(n, values))), macnames)
|
self.valueof(n, values))), macnames)
|
||||||
e.xmlwrite(macdoc, self.macxmlname(ifc))
|
e.xmlwrite(macdoc, self.macxmlname(ifc))
|
||||||
|
|
||||||
phydoc = EmaneUniversalModel.getphydoc(e, self, values, phynames)
|
phydoc = EmaneUniversalModel.getphydoc(e, self, values, phynames)
|
||||||
|
|
114
daemon/core/emane/tdma.py
Normal file
114
daemon/core/emane/tdma.py
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
|
||||||
|
#
|
||||||
|
# CORE
|
||||||
|
# Copyright (c)2013 Company.
|
||||||
|
# See the LICENSE file included in this distribution.
|
||||||
|
#
|
||||||
|
# author: Name <email@company.com>
|
||||||
|
#
|
||||||
|
'''
|
||||||
|
tdma.py: EMANE TDMA model bindings for CORE
|
||||||
|
'''
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import string
|
||||||
|
try:
|
||||||
|
from emanesh.events import EventService
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
from core.api import coreapi
|
||||||
|
from core.constants import *
|
||||||
|
from emane import Emane, EmaneModel
|
||||||
|
from universal import EmaneUniversalModel
|
||||||
|
|
||||||
|
class EmaneTdmaModel(EmaneModel):
|
||||||
|
def __init__(self, session, objid = None, verbose = False):
|
||||||
|
EmaneModel.__init__(self, session, objid, verbose)
|
||||||
|
|
||||||
|
# model name
|
||||||
|
_name = "emane_tdma"
|
||||||
|
if Emane.version >= Emane.EMANE101:
|
||||||
|
xml_path = '/usr/share/emane/xml/models/mac/tdmaeventscheduler'
|
||||||
|
else:
|
||||||
|
raise Exception("EMANE TDMA requires EMANE 1.0.1 or greater")
|
||||||
|
|
||||||
|
|
||||||
|
# MAC parameters
|
||||||
|
_confmatrix_mac = [
|
||||||
|
("enablepromiscuousmode", coreapi.CONF_DATA_TYPE_BOOL, '0',
|
||||||
|
'True,False', 'enable promiscuous mode'),
|
||||||
|
("flowcontrolenable", coreapi.CONF_DATA_TYPE_BOOL, '0',
|
||||||
|
'On,Off', 'enable traffic flow control'),
|
||||||
|
("flowcontroltokens", coreapi.CONF_DATA_TYPE_UINT16, '10',
|
||||||
|
'', 'number of flow control tokens'),
|
||||||
|
("fragmentcheckthreshold", coreapi.CONF_DATA_TYPE_UINT16, '2',
|
||||||
|
'', 'rate in seconds for check if fragment reassembly efforts should be abandoned'),
|
||||||
|
("fragmenttimeoutthreshold", coreapi.CONF_DATA_TYPE_UINT16, '5',
|
||||||
|
'', 'threshold in seconds to wait for another packet fragment for reassembly'),
|
||||||
|
('neighbormetricdeletetime', coreapi.CONF_DATA_TYPE_FLOAT, '60.0',
|
||||||
|
'', 'neighbor RF reception timeout for removal from neighbor table (sec)'),
|
||||||
|
('neighbormetricupdateinterval', coreapi.CONF_DATA_TYPE_FLOAT, '1.0',
|
||||||
|
'', 'neighbor table update interval (sec)'),
|
||||||
|
("pcrcurveuri", coreapi.CONF_DATA_TYPE_STRING, '%s/tdmabasemodelpcr.xml' % xml_path,
|
||||||
|
'', 'SINR/PCR curve file'),
|
||||||
|
("queue.aggregationenable", coreapi.CONF_DATA_TYPE_BOOL, '1',
|
||||||
|
'On,Off', 'enable transmit packet aggregation'),
|
||||||
|
('queue.aggregationslotthreshold', coreapi.CONF_DATA_TYPE_FLOAT, '90.0',
|
||||||
|
'', 'percentage of a slot that must be filled in order to conclude aggregation'),
|
||||||
|
("queue.depth", coreapi.CONF_DATA_TYPE_UINT16, '256',
|
||||||
|
'', 'size of the per service class downstream packet queues (packets)'),
|
||||||
|
("queue.fragmentationenable", coreapi.CONF_DATA_TYPE_BOOL, '1',
|
||||||
|
'On,Off', 'enable packet fragmentation (over multiple slots)'),
|
||||||
|
("queue.strictdequeueenable", coreapi.CONF_DATA_TYPE_BOOL, '0',
|
||||||
|
'On,Off', 'enable strict dequeueing to specified queues only'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# PHY parameters from Universal PHY
|
||||||
|
_confmatrix_phy = EmaneUniversalModel._confmatrix
|
||||||
|
|
||||||
|
_confmatrix = _confmatrix_mac + _confmatrix_phy
|
||||||
|
|
||||||
|
# value groupings
|
||||||
|
_confgroups = "TDMA MAC Parameters:1-%d|Universal PHY Parameters:%d-%d" % \
|
||||||
|
(len(_confmatrix_mac), len(_confmatrix_mac) + 1, len(_confmatrix))
|
||||||
|
|
||||||
|
def buildnemxmlfiles(self, e, ifc):
|
||||||
|
''' Build the necessary nem, mac, and phy XMLs in the given path.
|
||||||
|
If an individual NEM has a nonstandard config, we need to build
|
||||||
|
that file also. Otherwise the WLAN-wide nXXemane_tdmanem.xml,
|
||||||
|
nXXemane_tdmamac.xml, nXXemane_tdmaphy.xml are used.
|
||||||
|
'''
|
||||||
|
values = e.getifcconfig(self.objid, self._name,
|
||||||
|
self.getdefaultvalues(), ifc)
|
||||||
|
if values is None:
|
||||||
|
return
|
||||||
|
nemdoc = e.xmldoc("nem")
|
||||||
|
nem = nemdoc.getElementsByTagName("nem").pop()
|
||||||
|
nem.setAttribute("name", "TDMA NEM")
|
||||||
|
e.appendtransporttonem(nemdoc, nem, self.objid, ifc)
|
||||||
|
mactag = nemdoc.createElement("mac")
|
||||||
|
mactag.setAttribute("definition", self.macxmlname(ifc))
|
||||||
|
nem.appendChild(mactag)
|
||||||
|
phytag = nemdoc.createElement("phy")
|
||||||
|
phytag.setAttribute("definition", self.phyxmlname(ifc))
|
||||||
|
nem.appendChild(phytag)
|
||||||
|
e.xmlwrite(nemdoc, self.nemxmlname(ifc))
|
||||||
|
|
||||||
|
names = list(self.getnames())
|
||||||
|
macnames = names[:len(self._confmatrix_mac)]
|
||||||
|
phynames = names[len(self._confmatrix_mac):]
|
||||||
|
# make any changes to the mac/phy names here to e.g. exclude them from
|
||||||
|
# the XML output
|
||||||
|
|
||||||
|
macdoc = e.xmldoc("mac")
|
||||||
|
mac = macdoc.getElementsByTagName("mac").pop()
|
||||||
|
mac.setAttribute("name", "TDMA MAC")
|
||||||
|
mac.setAttribute("library", "tdmaeventschedulerradiomodel")
|
||||||
|
# append MAC options to macdoc
|
||||||
|
map(lambda n: mac.appendChild(e.xmlparam(macdoc, n, \
|
||||||
|
self.valueof(n, values))), macnames)
|
||||||
|
e.xmlwrite(macdoc, self.macxmlname(ifc))
|
||||||
|
|
||||||
|
phydoc = EmaneUniversalModel.getphydoc(e, self, values, phynames)
|
||||||
|
e.xmlwrite(phydoc, self.phyxmlname(ifc))
|
||||||
|
|
|
@ -11,8 +11,6 @@ vnet.py: PyCoreNet and LxBrNet classes that implement virtual networks using
|
||||||
Linux Ethernet bridging and ebtables rules.
|
Linux Ethernet bridging and ebtables rules.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
import os, sys, threading, time, subprocess
|
import os, sys, threading, time, subprocess
|
||||||
|
|
||||||
from core.api import coreapi
|
from core.api import coreapi
|
||||||
|
@ -347,10 +345,6 @@ class LxBrNet(PyCoreNet):
|
||||||
''' Configure link parameters by applying tc queuing disciplines on the
|
''' Configure link parameters by applying tc queuing disciplines on the
|
||||||
interface.
|
interface.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
#sys.stderr.write("enter linkconfig() ...\n")
|
|
||||||
#traceback.print_stack()
|
|
||||||
|
|
||||||
if devname is None:
|
if devname is None:
|
||||||
devname = netif.localname
|
devname = netif.localname
|
||||||
tc = [TC_BIN, "qdisc", "replace", "dev", devname]
|
tc = [TC_BIN, "qdisc", "replace", "dev", devname]
|
||||||
|
|
|
@ -91,7 +91,7 @@ class NrlNhdp(NrlService):
|
||||||
|
|
||||||
servicenames = map(lambda x: x._name, services)
|
servicenames = map(lambda x: x._name, services)
|
||||||
if "SMF" in servicenames:
|
if "SMF" in servicenames:
|
||||||
cmd += " -flooding ecds"
|
cmd += " -flooding ecds-etx sticky"
|
||||||
cmd += " -smfClient %s_smf" % node.name
|
cmd += " -smfClient %s_smf" % node.name
|
||||||
|
|
||||||
netifs = filter(lambda x: not getattr(x, 'control', False), \
|
netifs = filter(lambda x: not getattr(x, 'control', False), \
|
||||||
|
|
|
@ -14,6 +14,7 @@ that manages a CORE session.
|
||||||
import os, sys, tempfile, shutil, shlex, atexit, gc, pwd
|
import os, sys, tempfile, shutil, shlex, atexit, gc, pwd
|
||||||
import threading, time, random
|
import threading, time, random
|
||||||
import traceback
|
import traceback
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from core.api import coreapi
|
from core.api import coreapi
|
||||||
if os.uname()[0] == "Linux":
|
if os.uname()[0] == "Linux":
|
||||||
|
@ -289,8 +290,16 @@ class Session(object):
|
||||||
self.warn("Error writing hook '%s': %s" % (filename, e))
|
self.warn("Error writing hook '%s': %s" % (filename, e))
|
||||||
self.info("Running hook %s for state %s" % (filename, state))
|
self.info("Running hook %s for state %s" % (filename, state))
|
||||||
try:
|
try:
|
||||||
check_call(["/bin/sh", filename], cwd=self.sessiondir,
|
stdout = open(os.path.join(self.sessiondir,
|
||||||
env=self.getenviron())
|
filename + '.log'), 'w')
|
||||||
|
stderr = subprocess.STDOUT
|
||||||
|
except:
|
||||||
|
stdout = None
|
||||||
|
stderr = None
|
||||||
|
try:
|
||||||
|
check_call(["/bin/sh", filename], stdin=open(os.devnull, 'r'),
|
||||||
|
stdout=stdout, stderr=stderr, close_fds=True,
|
||||||
|
cwd=self.sessiondir, env=self.getenviron())
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.warn("Error running hook '%s' for state %s: %s" %
|
self.warn("Error running hook '%s' for state %s: %s" %
|
||||||
(filename, state, e))
|
(filename, state, e))
|
||||||
|
|
56
packaging/deb.mk
Normal file
56
packaging/deb.mk
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
DEBBUILD = .debbuild
|
||||||
|
|
||||||
|
CORE_VERSION = $(shell cat .version 2> /dev/null)
|
||||||
|
|
||||||
|
COREBUILD = $(DEBBUILD)/core-$(CORE_VERSION)
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: clean .version build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf $(DEBBUILD)
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: changelog
|
||||||
|
cd $(COREBUILD) && dpkg-buildpackage -b -us -uc
|
||||||
|
@printf "\ndebian packages built in $(DEBBUILD)\n\n"
|
||||||
|
|
||||||
|
.PHONY: changelog
|
||||||
|
changelog: debian
|
||||||
|
echo "core ($(CORE_VERSION)-1) unstable; urgency=low" > $(COREBUILD)/debian/changelog.generated
|
||||||
|
echo " * interim package generated from source" >> $(COREBUILD)/debian/changelog.generated
|
||||||
|
echo " -- CORE Developers <core-dev@pf.itd.nrl.navy.mil> $$(date -R)" >> $(COREBUILD)/debian/changelog.generated
|
||||||
|
cd $(COREBUILD)/debian && \
|
||||||
|
{ test ! -L changelog && mv -f changelog changelog.save; } && \
|
||||||
|
{ test "$$(readlink changelog)" = "changelog.generated" || \
|
||||||
|
ln -sf changelog.generated changelog; }
|
||||||
|
|
||||||
|
.PHONY: debian
|
||||||
|
debian: corebuild
|
||||||
|
cd $(COREBUILD) && ln -s packaging/deb debian
|
||||||
|
|
||||||
|
.PHONY: corebuild
|
||||||
|
corebuild: $(DEBBUILD) dist
|
||||||
|
tar -C $(DEBBUILD) -xzf core-$(CORE_VERSION).tar.gz
|
||||||
|
|
||||||
|
.PHONY: dist
|
||||||
|
dist: Makefile
|
||||||
|
$(MAKE) dist
|
||||||
|
|
||||||
|
Makefile: configure
|
||||||
|
./configure
|
||||||
|
|
||||||
|
configure: bootstrap.sh
|
||||||
|
./bootstrap.sh
|
||||||
|
|
||||||
|
bootstrap.sh:
|
||||||
|
@printf "\nERROR: make must be called from the top-level directory:\n"
|
||||||
|
@printf " make -f packaging/$(lastword $(MAKEFILE_LIST))\n\n"
|
||||||
|
@false
|
||||||
|
|
||||||
|
.version: Makefile
|
||||||
|
$(MAKE) $@
|
||||||
|
|
||||||
|
$(DEBBUILD):
|
||||||
|
mkdir -p $@
|
|
@ -1,23 +1,20 @@
|
||||||
#! /usr/bin/dh-exec
|
#! /usr/bin/dh-exec
|
||||||
@SBINDIR@
|
@SBINDIR@
|
||||||
@CORE_CONF_DIR@
|
@CORE_CONF_DIR@
|
||||||
# configure prints a warning if CORE_DATA_DIR is used here
|
@CORE_DATA_DIR@/examples/corens3
|
||||||
# ATdatarootdirAT is expanding to ${datarootdir}/man/man1/
|
@CORE_DATA_DIR@/examples/*.py
|
||||||
/usr/share/core/examples/corens3
|
@CORE_DATA_DIR@/examples/hooks
|
||||||
/usr/share/core/examples/*.py
|
@CORE_DATA_DIR@/examples/myservices
|
||||||
/usr/share/core/examples/hooks
|
@CORE_DATA_DIR@/examples/netns
|
||||||
/usr/share/core/examples/myservices
|
@CORE_DATA_DIR@/examples/services
|
||||||
/usr/share/core/examples/netns
|
# ATmandirAT is expanding to ${datarootdir}/man
|
||||||
/usr/share/core/examples/services
|
@datarootdir@/man/man1/vnoded.1
|
||||||
# ATmandirAT is expanding to ${datarootdir}/man/man1/core-daemon.1
|
@datarootdir@/man/man1/vcmd.1
|
||||||
/usr/share/man/man1/vnoded.1
|
@datarootdir@/man/man1/netns.1
|
||||||
/usr/share/man/man1/vcmd.1
|
@datarootdir@/man/man1/core-daemon.1
|
||||||
/usr/share/man/man1/netns.1
|
@datarootdir@/man/man1/coresendmsg.1
|
||||||
/usr/share/man/man1/core-daemon.1
|
@datarootdir@/man/man1/core-cleanup.1
|
||||||
/usr/share/man/man1/coresendmsg.1
|
@datarootdir@/man/man1/core-xen-cleanup.1
|
||||||
/usr/share/man/man1/core-cleanup.1
|
@pyprefix@/lib/python2.7/dist-packages
|
||||||
/usr/share/man/man1/core-xen-cleanup.1
|
|
||||||
# ATpythondirAT is expanding to ${prefix}/lib/python2.7/dist-packages
|
|
||||||
/usr/lib/python2.7/dist-packages
|
|
||||||
/etc/init.d
|
/etc/init.d
|
||||||
/etc/logrotate.d
|
/etc/logrotate.d
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
#! /usr/bin/dh-exec
|
#! /usr/bin/dh-exec
|
||||||
@BINDIR@/core-gui
|
@BINDIR@/core-gui
|
||||||
@CORE_LIB_DIR@
|
@CORE_LIB_DIR@
|
||||||
# configure prints a warning if CORE_DATA_DIR is used here
|
@CORE_DATA_DIR@/icons
|
||||||
# ATdatarootdirAT is expanding to ${datarootdir}/man/man1/
|
@CORE_DATA_DIR@/examples/configs
|
||||||
/usr/share/core/icons
|
@datarootdir@/pixmaps
|
||||||
/usr/share/core/examples/configs
|
@datarootdir@/applications
|
||||||
/usr/share/pixmaps
|
# ATmandirAT is expanding to ${datarootdir}/man
|
||||||
/usr/share/applications
|
@datarootdir@/man/man1/core-gui.1
|
||||||
# ATmandirAT is expanding to ${datarootdir}/man/man1/core-gui.1
|
|
||||||
/usr/share/man/man1/core-gui.1
|
|
||||||
|
|
40
packaging/rpm.mk
Normal file
40
packaging/rpm.mk
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
RPMBUILD = .rpmbuild
|
||||||
|
|
||||||
|
CORE_VERSION = $(shell cat .version 2> /dev/null)
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: clean .version build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf $(RPMBUILD)
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: dist
|
||||||
|
for d in SOURCES SPECS; do mkdir -p $(RPMBUILD)/$$d; done
|
||||||
|
cp -afv core-$(CORE_VERSION).tar.gz $(RPMBUILD)/SOURCES
|
||||||
|
cp -afv packaging/rpm/core.spec $(RPMBUILD)/SPECS
|
||||||
|
rpmbuild -bb --clean $(RPMBUILD)/SPECS/core.spec \
|
||||||
|
--define "_topdir $$PWD/.rpmbuild"
|
||||||
|
@printf "\nRPM packages saved in $(RPMBUILD)/RPMS\n\n"
|
||||||
|
|
||||||
|
.PHONY: dist
|
||||||
|
dist: Makefile
|
||||||
|
$(MAKE) dist
|
||||||
|
|
||||||
|
Makefile: configure
|
||||||
|
./configure --prefix=/usr --exec-prefix=/usr
|
||||||
|
|
||||||
|
configure: bootstrap.sh
|
||||||
|
./bootstrap.sh
|
||||||
|
|
||||||
|
bootstrap.sh:
|
||||||
|
@printf "\nERROR: make must be called from the top-level directory:\n"
|
||||||
|
@printf " make -f packaging/$(lastword $(MAKEFILE_LIST))\n\n"
|
||||||
|
@false
|
||||||
|
|
||||||
|
.version: Makefile
|
||||||
|
$(MAKE) $@
|
||||||
|
|
||||||
|
$(RPMBUILD):
|
||||||
|
mkdir -p $@
|
|
@ -336,6 +336,7 @@ fi
|
||||||
%{python_sitelib}/core/emane/__init__.py*
|
%{python_sitelib}/core/emane/__init__.py*
|
||||||
%{python_sitelib}/core/emane/nodes.py*
|
%{python_sitelib}/core/emane/nodes.py*
|
||||||
%{python_sitelib}/core/emane/rfpipe.py*
|
%{python_sitelib}/core/emane/rfpipe.py*
|
||||||
|
%{python_sitelib}/core/emane/tdma.py*
|
||||||
%{python_sitelib}/core/emane/universal.py*
|
%{python_sitelib}/core/emane/universal.py*
|
||||||
%{python_sitelib}/core/__init__.py*
|
%{python_sitelib}/core/__init__.py*
|
||||||
%{python_sitelib}/core/location.py*
|
%{python_sitelib}/core/location.py*
|
||||||
|
@ -402,7 +403,7 @@ fi
|
||||||
%{_sbindir}/vnoded
|
%{_sbindir}/vnoded
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jun 5 2015 CORE Developers <core-dev@pf.itd.nrl.navy.mil> - 4.8
|
* Fri Jun 5 2015 CORE Developers <core-dev@pf.itd.nrl.navy.mil> - 4.8
|
||||||
- Support for NRL Network Modeling Framework (NMF) XML representation, bugfixes
|
- Support for NRL Network Modeling Framework (NMF) XML representation, bugfixes
|
||||||
* Wed Aug 6 2014 Jeff Ahrenholz <core-dev@pf.itd.nrl.navy.mil> - 4.7
|
* Wed Aug 6 2014 Jeff Ahrenholz <core-dev@pf.itd.nrl.navy.mil> - 4.7
|
||||||
- EMANE 0.9.1, asymmetric links, bugfixes
|
- EMANE 0.9.1, asymmetric links, bugfixes
|
||||||
|
|
Loading…
Add table
Reference in a new issue