searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

SONiC VS仿真环境搭建指南

2023-06-02 03:15:20
192
0

一、准备

1. 物理环境要求

物理环境安装docker和openvswitch。

2. VS仿真镜像编译

  • platform设置成vs
make configure PLATFORM=vs
  • 编译生成docker-sonic-vs.gz
make target/docker-sonic-vs.gz

3. 测试拓扑

4. 拓扑脚本

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5040b6b7-a918-4a2e-a0ac-ce4efde69320/start.sh
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/08caba2e-ca31-43e7-8766-477b26de4ddf/stop.sh

二、搭建过程

1. 生成拓扑

  • 加载vs仿真镜像。把docker-sonic-vs.gz拷⻉到物理机,使用下面的docker命令加载docker镜像。
docker load < docker-sonic-vs.gz
  • 把start.sh和stop.sh拷⻉到物理机,并加上可执行权限。
  • 执行脚本start.sh进行环境搭建。脚本执行没有报错,并查看容器都已启动,说明拓扑搭建成功。
[root@192-168-152-241 vs-emulator]# ./start.sh
0e02060365912d01abc0a99bfc51c040046d1f03795ba0989243fec9385d52d9
53d5febdeb46f00d5e3826191eee4363a765daddb42660d67926ab5367f4d7d1
fc3fd7ba0d2f784ef7e046687d17682bba5916cf4e55c4f4fa5aa369e694d573
5def26989e0a1f3256215e64171e3ef9f176f05a917e9d04f00c32c6ab5d2839
Booting vses, please wait ~1 minute for vses to load
[root@192-168-152-241 vs-emulator]#
[root@192-168-152-241 vs-emulator]#
[root@192-168-152-241 vs-emulator]# docker ps
CONTAINER ID    IMAGE                      COMMAND         CREATED           STATUS              PORTS       NAMES
5def26989e0a    ubuntu:14.04               "/bin/bash"     35 seconds ago    Up 32 seconds                    h2
fc3fd7ba0d2f    ubuntu:14.04               "/bin/bash"     37 seconds ago    Up 35 seconds                    h1
53d5febdeb46    docker-sonic-vs:latest     "/bin/bash"     39 seconds ago    Up 37 seconds                    vs2
0e0206036591    docker-sonic-vs:latest     "/bin/bash"     41 seconds ago    Up 39 seconds                    vs1
[root@192-168-152-241 vs-emulator]#

2. 配置交换机

(1) vs1上的配置

  • 登录vs1。物理机上执行下面的命令,登录vs1。
[root@192-168-152-241 vs-emulator]# docker exec -it vs1 bash
  • 使Ethernet0和Ethernet4的状态变为UP。
root@0e0206036591:/# ifconfig eth1 up
root@0e0206036591:/# ifconfig eth2 up
root@0e0206036591:/# config interface startup Ethernet0
root@0e0206036591:/# config interface startup Ethernet4

show interface status可以查看接口是否已UP。

备注:
vs的sonic 交换机中,主机接口和前面板接口之间的映射关系是:接口 eth1 绑定到 VS 软件交换机的端口 1,将 eth2 绑定到端口 2,以此类推。

  • 创建VLAN 100和VLAN 101
root@0e0206036591:/# config vlan add 100
root@0e0206036591:/# config vlan add 101
root@0e0206036591:/# show vlan config
/bin/sh: 1: sudo: not found
Name    VID   Member   Mode
------- ----- -------- ------
Vlan100 100
Vlan101 101
root@0e0206036591:/#
  • Ethernet0和Ethernet4分别加入到VLAN 100和VLAN 101
root@0e0206036591:/# config vlan member add -u 100 Ethernet0
root@0e0206036591:/# config vlan member add -u 101 Ethernet4
root@0e0206036591:/# show vlan config
/bin/sh: 1: sudo: not found
Name    VID   Member    Mode
------- ----- --------- --------
Vlan100 100 Ethernet0 untagged
Vlan101 101 Ethernet4 untagged
root@0e0206036591:/#
  • VLAN接口配置IP地址
root@0e0206036591:/# config interface ip add Vlan100 192.168.1.1/24
root@0e0206036591:/# config interface ip add Vlan101 10.0.0.1/24
root@0e0206036591:/# show ip interface
/bin/sh: 1: sudo: not found
Interface  Master  IPv4  address/mask  Admin/Oper  BGP  Neighbor  Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Vlan100  192.168.1.1/24  up/up  N/A  N/A
Vlan101  10.0.0.1/24  up/up  N/A  N/A
lo       127.0.0.1/8  up/up  N/A  N/A
  • 配置静态路由
root@0e0206036591:/# vtysh
Hello, this is FRRouting (version 7.5.1-sonic).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

0e0206036591#
0e0206036591# configure terminal
0e0206036591(config)# ip route 192.168.2.0/24 10.0.0.2
0e0206036591(config)# exit
0e0206036591# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup

C>* 10.0.0.0/24 is directly connected, Vlan101, 00:03:02
C>* 192.168.1.0/24 is directly connected, Vlan100, 00:03:53
S>* 192.168.2.0/24 [1/0] via 10.0.0.2, Vlan101, weight 1, 00:00:08
0e0206036591#

(2)vs2的配置

vs2的配置与vs2类似,具体命令如下:

[root@192-168-152-241 vs-emulator]# docker exec -it vs2 bash
root@53d5febdeb46:/# ifconfig eth1 up
root@53d5febdeb46:/# ifconfig eth2 up
root@53d5febdeb46:/# config interface startup Ethernet0
root@53d5febdeb46:/# config interface startup Ethernet4
root@53d5febdeb46:/# config vlan add 100
root@53d5febdeb46:/# config vlan add 101
root@53d5febdeb46:/# config vlan member add -u 100 Ethernet0
root@53d5febdeb46:/# config vlan member add -u 101 Ethernet4
root@53d5febdeb46:/# config interface ip add Vlan100 192.168.2.1/24
root@53d5febdeb46:/# config interface ip add Vlan101 10.0.0.2/24
root@53d5febdeb46:/# vtysh
Hello, this is FRRouting (version 7.5.1-sonic).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
53d5febdeb46# conf terminal
53d5febdeb46(config)# ip route 192.168.1.0/24 10.0.0.1

3. 验证

h1 ping h2,可以ping通说明交换机配置正确。

[root@192-168-152-241 vs-emulator]# docker exec -it h1 bash
root@fc3fd7ba0d2f:/# ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_seq=1 ttl=62 time=1.17 ms
64 bytes from 192.168.2.2: icmp_seq=2 ttl=62 time=0.202 ms
64 bytes from 192.168.2.2: icmp_seq=3 ttl=62 time=0.175 ms
64 bytes from 192.168.2.2: icmp_seq=4 ttl=62 time=0.163 ms
64 bytes from 192.168.2.2: icmp_seq=5 ttl=62 time=0.167 ms
64 bytes from 192.168.2.2: icmp_seq=6 ttl=62 time=0.184 ms

4. 释放环境

执行脚本stop.sh释放仿真环境,脚本执行完成会删除容器和ovs网桥。

[root@192-168-152-241 vs-emulator]# ./stop.sh
vs1
vs2
h1
h2

三、定制拓扑

如果定制新的仿真拓扑,需要修改start.sh和stop.sh脚本。

1. 脚本说明

(1)start.sh

#!/bin/bash
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs1 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs2 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name h1 -it -d ubuntu:14.04
sudo docker run --net=none --privileged --entrypoint /bin/bash --name h2 -it -d ubuntu:14.04
sudo ovs-vsctl add-br vs1_vs2_0
sudo ovs-docker add-port vs1_vs2_0 eth0 vs1
sudo ovs-docker add-port vs1_vs2_0 eth0 vs2
sudo ovs-vsctl add-br vs1_vs2
sudo ovs-docker add-port vs1_vs2 eth2 vs1
sudo ovs-docker add-port vs1_vs2 eth2 vs2
sudo ovs-vsctl add-br h1_vs1
sudo ovs-docker add-port h1_vs1 eth1 vs1
sudo ovs-docker add-port h1_vs1 eth1 h1
sudo ovs-vsctl add-br h2_vs2
sudo ovs-docker add-port h2_vs2 eth1 vs2
sudo ovs-docker add-port h2_vs2 eth1 h2
sudo docker exec -d h1 sysctl net.ipv6.conf.eth0.disable_ipv6=1
sudo docker exec -d h1 sysctl net.ipv6.conf.eth1.disable_ipv6=1
sudo docker exec -d h2 sysctl net.ipv6.conf.eth0.disable_ipv6=1
sudo docker exec -d h2 sysctl net.ipv6.conf.eth1.disable_ipv6=1
sudo docker exec -d h1 ifconfig eth1 192.168.1.2/24 mtu 1400
sudo docker exec -d h1 ip route replace default via 192.168.1.1
sudo docker exec -d h2 ifconfig eth1 192.168.2.2/24 mtu 1400
sudo docker exec -d h2 ip route replace default via 192.168.2.1
sudo docker exec -d vs1 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.lo.disable_ipv6=0
echo "Booting vses, please wait ~1 minute for vses to load"
sudo docker exec -d vs1 supervisord
sudo docker exec -d vs2 supervisord

启动脚本包括以下的部分:

  • 运行交换机容器和客户端容器,运行容器必须已加载相关容器的docker镜像。
  • 交换机和客户端、交换机之间互连。先创建ovs网桥,然后把互连的交换机或者客户端的端口加入ovs网桥,完成互连。注意,在交换机上要创建eth0,交换机使用这个端口作为管理口,如果不存在这个端口,交换机的SONiC的启动会失败。
  • 配置客户端。例子中是关闭客户端IPv6功能和配置客户端的IPv4地址。根据需要可以配置linux上其他的配置。
  • 配置交换机。例子中是开启交换机上的IPv6功能。根据需要可以配置linux上其他的配置。
  • 每个交换机容器执行supervisord命令。、

(2) stop.sh

sudo docker rm -f vs1
sudo docker rm -f vs2
sudo docker rm -f h1
sudo docker rm -f h2
sudo ovs-vsctl del-br vs1_vs2
sudo ovs-vsctl del-br h1_vs1
sudo ovs-vsctl del-br h2_vs2
sudo ovs-vsctl del-br vs1_vs2_0

关闭脚本包括以下的部分:

  • 删除容器
  • 删除ovs网桥

2.  定制流程

  • 确定拓扑,主要是:包含哪些客户端和交换机,客户端如何与交换机互连,交换机与交换机之间如何互连,用了哪些互连端口。
  • 根据拓扑编写start.sh和stop.sh脚本。
  • 根据拓扑确定每个交换机上的配置,登录交换机完成配置。

官方参考文档:
https://github.com/sonic-net/SONiC/wiki/SONiC-P4-Software-Switch

尝试搭建的过程中出现的问题的说明
说明:
如果只是使用 docker-sonic-vs.gz 生成的docker镜像 来启动 vs-sonic 的话,这样进入sonic容器后,会发现 config,show命令都无法使用,因为连接不到redis db报错。
需要执行 : sudo docker exec -d vs1 supervisord

新增搭建脚本环境:

#!/bin/bash
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs1 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs2 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs3 -it -d docker-sonic-vs:latest
sudo ovs-vsctl add-br vs1_vs2_0
sudo ovs-docker add-port vs1_vs2_0 eth0 vs1
sudo ovs-docker add-port vs1_vs2_0 eth0 vs2
sudo ovs-vsctl add-br vs1_vs2
sudo ovs-docker add-port vs1_vs2 eth1 vs1
sudo ovs-docker add-port vs1_vs2 eth1 vs2
sudo ovs-vsctl add-br vs2_vs3_0
sudo ovs-docker add-port vs2_vs3_0 eth0 vs2
sudo ovs-docker add-port vs2_vs3_0 eth0 vs3
sudo ovs-vsctl add-br vs2_vs3
sudo ovs-docker add-port vs2_vs3 eth2 vs2
sudo ovs-docker add-port vs2_vs3 eth2 vs3
sudo docker exec -d vs1 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.lo.disable_ipv6=0
echo "Booting vses, please wait ~3 minute for vses to load"
sudo docker exec -d vs1 supervisord
sudo docker exec -d vs2 supervisord
sudo docker exec -d vs3 supervisord

 

0条评论
0 / 1000
吴****克
4文章数
0粉丝数
吴****克
4 文章 | 0 粉丝
吴****克
4文章数
0粉丝数
吴****克
4 文章 | 0 粉丝
原创

SONiC VS仿真环境搭建指南

2023-06-02 03:15:20
192
0

一、准备

1. 物理环境要求

物理环境安装docker和openvswitch。

2. VS仿真镜像编译

  • platform设置成vs
make configure PLATFORM=vs
  • 编译生成docker-sonic-vs.gz
make target/docker-sonic-vs.gz

3. 测试拓扑

4. 拓扑脚本

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5040b6b7-a918-4a2e-a0ac-ce4efde69320/start.sh
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/08caba2e-ca31-43e7-8766-477b26de4ddf/stop.sh

二、搭建过程

1. 生成拓扑

  • 加载vs仿真镜像。把docker-sonic-vs.gz拷⻉到物理机,使用下面的docker命令加载docker镜像。
docker load < docker-sonic-vs.gz
  • 把start.sh和stop.sh拷⻉到物理机,并加上可执行权限。
  • 执行脚本start.sh进行环境搭建。脚本执行没有报错,并查看容器都已启动,说明拓扑搭建成功。
[root@192-168-152-241 vs-emulator]# ./start.sh
0e02060365912d01abc0a99bfc51c040046d1f03795ba0989243fec9385d52d9
53d5febdeb46f00d5e3826191eee4363a765daddb42660d67926ab5367f4d7d1
fc3fd7ba0d2f784ef7e046687d17682bba5916cf4e55c4f4fa5aa369e694d573
5def26989e0a1f3256215e64171e3ef9f176f05a917e9d04f00c32c6ab5d2839
Booting vses, please wait ~1 minute for vses to load
[root@192-168-152-241 vs-emulator]#
[root@192-168-152-241 vs-emulator]#
[root@192-168-152-241 vs-emulator]# docker ps
CONTAINER ID    IMAGE                      COMMAND         CREATED           STATUS              PORTS       NAMES
5def26989e0a    ubuntu:14.04               "/bin/bash"     35 seconds ago    Up 32 seconds                    h2
fc3fd7ba0d2f    ubuntu:14.04               "/bin/bash"     37 seconds ago    Up 35 seconds                    h1
53d5febdeb46    docker-sonic-vs:latest     "/bin/bash"     39 seconds ago    Up 37 seconds                    vs2
0e0206036591    docker-sonic-vs:latest     "/bin/bash"     41 seconds ago    Up 39 seconds                    vs1
[root@192-168-152-241 vs-emulator]#

2. 配置交换机

(1) vs1上的配置

  • 登录vs1。物理机上执行下面的命令,登录vs1。
[root@192-168-152-241 vs-emulator]# docker exec -it vs1 bash
  • 使Ethernet0和Ethernet4的状态变为UP。
root@0e0206036591:/# ifconfig eth1 up
root@0e0206036591:/# ifconfig eth2 up
root@0e0206036591:/# config interface startup Ethernet0
root@0e0206036591:/# config interface startup Ethernet4

show interface status可以查看接口是否已UP。

备注:
vs的sonic 交换机中,主机接口和前面板接口之间的映射关系是:接口 eth1 绑定到 VS 软件交换机的端口 1,将 eth2 绑定到端口 2,以此类推。

  • 创建VLAN 100和VLAN 101
root@0e0206036591:/# config vlan add 100
root@0e0206036591:/# config vlan add 101
root@0e0206036591:/# show vlan config
/bin/sh: 1: sudo: not found
Name    VID   Member   Mode
------- ----- -------- ------
Vlan100 100
Vlan101 101
root@0e0206036591:/#
  • Ethernet0和Ethernet4分别加入到VLAN 100和VLAN 101
root@0e0206036591:/# config vlan member add -u 100 Ethernet0
root@0e0206036591:/# config vlan member add -u 101 Ethernet4
root@0e0206036591:/# show vlan config
/bin/sh: 1: sudo: not found
Name    VID   Member    Mode
------- ----- --------- --------
Vlan100 100 Ethernet0 untagged
Vlan101 101 Ethernet4 untagged
root@0e0206036591:/#
  • VLAN接口配置IP地址
root@0e0206036591:/# config interface ip add Vlan100 192.168.1.1/24
root@0e0206036591:/# config interface ip add Vlan101 10.0.0.1/24
root@0e0206036591:/# show ip interface
/bin/sh: 1: sudo: not found
Interface  Master  IPv4  address/mask  Admin/Oper  BGP  Neighbor  Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Vlan100  192.168.1.1/24  up/up  N/A  N/A
Vlan101  10.0.0.1/24  up/up  N/A  N/A
lo       127.0.0.1/8  up/up  N/A  N/A
  • 配置静态路由
root@0e0206036591:/# vtysh
Hello, this is FRRouting (version 7.5.1-sonic).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

0e0206036591#
0e0206036591# configure terminal
0e0206036591(config)# ip route 192.168.2.0/24 10.0.0.2
0e0206036591(config)# exit
0e0206036591# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup

C>* 10.0.0.0/24 is directly connected, Vlan101, 00:03:02
C>* 192.168.1.0/24 is directly connected, Vlan100, 00:03:53
S>* 192.168.2.0/24 [1/0] via 10.0.0.2, Vlan101, weight 1, 00:00:08
0e0206036591#

(2)vs2的配置

vs2的配置与vs2类似,具体命令如下:

[root@192-168-152-241 vs-emulator]# docker exec -it vs2 bash
root@53d5febdeb46:/# ifconfig eth1 up
root@53d5febdeb46:/# ifconfig eth2 up
root@53d5febdeb46:/# config interface startup Ethernet0
root@53d5febdeb46:/# config interface startup Ethernet4
root@53d5febdeb46:/# config vlan add 100
root@53d5febdeb46:/# config vlan add 101
root@53d5febdeb46:/# config vlan member add -u 100 Ethernet0
root@53d5febdeb46:/# config vlan member add -u 101 Ethernet4
root@53d5febdeb46:/# config interface ip add Vlan100 192.168.2.1/24
root@53d5febdeb46:/# config interface ip add Vlan101 10.0.0.2/24
root@53d5febdeb46:/# vtysh
Hello, this is FRRouting (version 7.5.1-sonic).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
53d5febdeb46# conf terminal
53d5febdeb46(config)# ip route 192.168.1.0/24 10.0.0.1

3. 验证

h1 ping h2,可以ping通说明交换机配置正确。

[root@192-168-152-241 vs-emulator]# docker exec -it h1 bash
root@fc3fd7ba0d2f:/# ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_seq=1 ttl=62 time=1.17 ms
64 bytes from 192.168.2.2: icmp_seq=2 ttl=62 time=0.202 ms
64 bytes from 192.168.2.2: icmp_seq=3 ttl=62 time=0.175 ms
64 bytes from 192.168.2.2: icmp_seq=4 ttl=62 time=0.163 ms
64 bytes from 192.168.2.2: icmp_seq=5 ttl=62 time=0.167 ms
64 bytes from 192.168.2.2: icmp_seq=6 ttl=62 time=0.184 ms

4. 释放环境

执行脚本stop.sh释放仿真环境,脚本执行完成会删除容器和ovs网桥。

[root@192-168-152-241 vs-emulator]# ./stop.sh
vs1
vs2
h1
h2

三、定制拓扑

如果定制新的仿真拓扑,需要修改start.sh和stop.sh脚本。

1. 脚本说明

(1)start.sh

#!/bin/bash
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs1 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs2 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name h1 -it -d ubuntu:14.04
sudo docker run --net=none --privileged --entrypoint /bin/bash --name h2 -it -d ubuntu:14.04
sudo ovs-vsctl add-br vs1_vs2_0
sudo ovs-docker add-port vs1_vs2_0 eth0 vs1
sudo ovs-docker add-port vs1_vs2_0 eth0 vs2
sudo ovs-vsctl add-br vs1_vs2
sudo ovs-docker add-port vs1_vs2 eth2 vs1
sudo ovs-docker add-port vs1_vs2 eth2 vs2
sudo ovs-vsctl add-br h1_vs1
sudo ovs-docker add-port h1_vs1 eth1 vs1
sudo ovs-docker add-port h1_vs1 eth1 h1
sudo ovs-vsctl add-br h2_vs2
sudo ovs-docker add-port h2_vs2 eth1 vs2
sudo ovs-docker add-port h2_vs2 eth1 h2
sudo docker exec -d h1 sysctl net.ipv6.conf.eth0.disable_ipv6=1
sudo docker exec -d h1 sysctl net.ipv6.conf.eth1.disable_ipv6=1
sudo docker exec -d h2 sysctl net.ipv6.conf.eth0.disable_ipv6=1
sudo docker exec -d h2 sysctl net.ipv6.conf.eth1.disable_ipv6=1
sudo docker exec -d h1 ifconfig eth1 192.168.1.2/24 mtu 1400
sudo docker exec -d h1 ip route replace default via 192.168.1.1
sudo docker exec -d h2 ifconfig eth1 192.168.2.2/24 mtu 1400
sudo docker exec -d h2 ip route replace default via 192.168.2.1
sudo docker exec -d vs1 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.lo.disable_ipv6=0
echo "Booting vses, please wait ~1 minute for vses to load"
sudo docker exec -d vs1 supervisord
sudo docker exec -d vs2 supervisord

启动脚本包括以下的部分:

  • 运行交换机容器和客户端容器,运行容器必须已加载相关容器的docker镜像。
  • 交换机和客户端、交换机之间互连。先创建ovs网桥,然后把互连的交换机或者客户端的端口加入ovs网桥,完成互连。注意,在交换机上要创建eth0,交换机使用这个端口作为管理口,如果不存在这个端口,交换机的SONiC的启动会失败。
  • 配置客户端。例子中是关闭客户端IPv6功能和配置客户端的IPv4地址。根据需要可以配置linux上其他的配置。
  • 配置交换机。例子中是开启交换机上的IPv6功能。根据需要可以配置linux上其他的配置。
  • 每个交换机容器执行supervisord命令。、

(2) stop.sh

sudo docker rm -f vs1
sudo docker rm -f vs2
sudo docker rm -f h1
sudo docker rm -f h2
sudo ovs-vsctl del-br vs1_vs2
sudo ovs-vsctl del-br h1_vs1
sudo ovs-vsctl del-br h2_vs2
sudo ovs-vsctl del-br vs1_vs2_0

关闭脚本包括以下的部分:

  • 删除容器
  • 删除ovs网桥

2.  定制流程

  • 确定拓扑,主要是:包含哪些客户端和交换机,客户端如何与交换机互连,交换机与交换机之间如何互连,用了哪些互连端口。
  • 根据拓扑编写start.sh和stop.sh脚本。
  • 根据拓扑确定每个交换机上的配置,登录交换机完成配置。

官方参考文档:
https://github.com/sonic-net/SONiC/wiki/SONiC-P4-Software-Switch

尝试搭建的过程中出现的问题的说明
说明:
如果只是使用 docker-sonic-vs.gz 生成的docker镜像 来启动 vs-sonic 的话,这样进入sonic容器后,会发现 config,show命令都无法使用,因为连接不到redis db报错。
需要执行 : sudo docker exec -d vs1 supervisord

新增搭建脚本环境:

#!/bin/bash
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs1 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs2 -it -d docker-sonic-vs:latest
sudo docker run --net=none --privileged --entrypoint /bin/bash --name vs3 -it -d docker-sonic-vs:latest
sudo ovs-vsctl add-br vs1_vs2_0
sudo ovs-docker add-port vs1_vs2_0 eth0 vs1
sudo ovs-docker add-port vs1_vs2_0 eth0 vs2
sudo ovs-vsctl add-br vs1_vs2
sudo ovs-docker add-port vs1_vs2 eth1 vs1
sudo ovs-docker add-port vs1_vs2 eth1 vs2
sudo ovs-vsctl add-br vs2_vs3_0
sudo ovs-docker add-port vs2_vs3_0 eth0 vs2
sudo ovs-docker add-port vs2_vs3_0 eth0 vs3
sudo ovs-vsctl add-br vs2_vs3
sudo ovs-docker add-port vs2_vs3 eth2 vs2
sudo ovs-docker add-port vs2_vs3 eth2 vs3
sudo docker exec -d vs1 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs1 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs2 sysctl net.ipv6.conf.lo.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.all.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.default.disable_ipv6=0
sudo docker exec -d vs3 sysctl net.ipv6.conf.lo.disable_ipv6=0
echo "Booting vses, please wait ~3 minute for vses to load"
sudo docker exec -d vs1 supervisord
sudo docker exec -d vs2 supervisord
sudo docker exec -d vs3 supervisord

 

文章来自个人专栏
技术原理
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0