netcomplete用于network configuration synthesis,可在给定requirement下,补齐configs(可以是 空/非空 的templates)
原文/介绍:https://netcomplete.ethz.ch/
源码:https://github.com/nsg-ethz/synet-plus
环境:python2.X (py3也行,不过要替换print等一些用法,我手动改了一些)
step1: git project
git clone https://github.com/nsg-ethz/synet-plus.git
step2: 安装tekton(这好像是ETH-NSG他们组自己写的python库?所以要手动安装一下,其余的直接install requirement就行)
cd 平常存放py project的文件夹
git clone https://github.com/nsg-ethz/tekton.git
pip install -e .
step3: run example test
bgp_peer是最简单的一个demo,custom*1+provider*2+对应router*3的一个网络
synthesis的步骤也是先计算propagation graph,然后synthesis所有context,最后用z3 slover解对应值写入configs
python synet/examples/bgp_peers.py outdir
ps: outdir/是存放configs的文件夹,同时还输出对应的所有smt语句(smt.smt2文件)
step4: run nsdi experiement (BGP only)
7个参数依次是:
grampl文件;
reqs文件(不太知道干嘛的,可能是reqs集合);
测试的reqs的数目;
req-type;
fixed从0~1,表示初始configs的确定值占比;
sketch ...?;
run-id...?;
sh ./eval_scripts/run-ebgp.sh $topo-file $reqs-file $reqs-num $req-type $fixed $sketch $RUN-ID
SO,这玩意怎么一步步地运行的呢?暂时没看懂,开个坑先。