In [ ]:
import xir
from xir import eq, choice, gt, ge, select
topo = xir.Network()
## Cellular Network
## -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
droid = topo.node({
'name': 'droid',
'image': choice([select('android-o'), select('android-n'), select('android-m')]) })
tower = topo.node({
'name': 'tower',
'image': select('lte-linux-2.2'),
'config': {'ansible': 'tower.yml'}
})
topo.connect([droid, tower], {
'stack': eq("lte"),
'bandwidth': eq(xir.mbps(1)),
'latency': eq(xir.ms(10))
})
## Industrial IoT Network
## -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
breaker = topo.node({'name': 'breaker', 'image': select('riot'), })
xbeehub = topo.node({'name': 'xbeehub', 'image': select('debian-9')})
topo.connect([breaker, xbeehub], {
'stack': eq('zigbee'),
'bandwidth': eq(xir.kbps(100)),
'loss': eq(xir.percent(25))
})
## Service Provider Network
## -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
server = topo.node({
'name': 'server',
'image': select("debian-9"),
'cpu': { 'cores': ge(8) },
'config': {'ansible': 'router.yml'}
})
router = topo.node({
'name': 'router',
'image': select('cumulus-3'),
'cpu': { 'cores': ge(4) },
'config': {'ansible': 'router.yml'},
})
topo.connect([server, router], {
'stack': eq("ip"),
'bandwidth': eq(xir.gbps(10))
})
## Internet
## -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
topo.connect([tower, xbeehub], {'stack': eq("ip"), 'bandwidth': eq(xir.mbps(3))})
topo.connect([xbeehub, router], {'stack': eq("ip"),'bandwidth': eq(xir.mbps(2))})
topo.connect([router, tower], {'stack': eq("ip"),'bandwidth': eq(xir.mbps(10))})
x = topo.xir()
xir.viz(x)
In [ ]:
import cxp
cxp.fetchAccessToken()
In [ ]:
r = cxp.newExperiment('kong', 'small-world', 'multi-level malware propagation')
r
In [ ]:
rr = cxp.realize(x, 'kong', 'small-world', 'v1')
rr
In [ ]:
import json
content = json.loads(rr.content)
content['realization']
In [ ]: