最近做实验需要fattree-k4,fattree-k6以及k值更大的拓扑,k4的转发表尚可手写,可是k值增大,流表的数量可是显著增加,手写肯定不太行,所以根据fattree的拓扑规律写一个自动生成转发表的程序,这样也可以通过这个转发表下发流表啥的就很方便了。
拓扑回顾
- fattree-k4
core层交换机数量: 4
agg层交换机数量:8
edge层交换机数量:8
host数量:16 - fattree-k
core: (k/2)^2
agg: (k^2)/2 = core * 2
edge = agg = (k^2)/2 = core*2
host = (k^3)/4 = core * k
代码
PS: 这个代码是默认转发到1端口的,所以剩下的端口基本没用,这个是可以改的哈~
/*by huahua 2020/11/25
for produce fattree_k6 forwarding rules
* */
package VeriDPRW;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Fattree_rule_producer {
public static void main(String[] args) throws Exception
{
int k =6;
int hostip_base = 167772160;//10.0.0.0
String working_dir = "D:\\src";
String foldername2 = working_dir+"/file/fat_tree_k" + k + "/";
String foldername1 = working_dir+"/file/fat_tree_config_k" + k + "/";
int coreNum = (k/2)*(k/2);
int aggNum = coreNum*2;
int edgeNum = aggNum;
///下面三个变量用于存储各层的交换机的名字
List<String> coreList = new ArrayList<String>();
List<String> aggList = new ArrayList<String>();
List<String> edgeList = new ArrayList<String>();
///添加各层的交换机
for(int i=1; i< coreNum+1; i++)
{
coreList.add("core" + i + "_rtr");
}
for(int i=1; i< aggNum + 1; i++)
{
aggList.add("agg" + i + "_rtr");
}
for(int i=1; i< edgeNum +1; i++)
{
edgeList.add("edge" + i + "_rtr");
}
///添加core的转发表
for(int i =0; i< coreNum; i++)
{
//creat config file
String file_name = foldername1 + coreList.get(i)+<