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 [ ]: