sonic-net/sonic-swss

GitHub: sonic-net/sonic-swss

SONiC 网络操作系统的交换机状态服务组件,通过 Redis 数据库提供网络应用与交换机硬件之间的状态同步和通信接口。

Stars: 219 | Forks: 685

*静态分析:* [![Total alerts](https://img.shields.io/lgtm/alerts/g/sonic-net/sonic-swss.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/sonic-net/sonic-swss/alerts/) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/sonic-net/sonic-swss.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/sonic-net/sonic-swss/context:python) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/sonic-net/sonic-swss.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/sonic-net/sonic-swss/context:cpp) *sonic-swss 构建:* [![master build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=master&label=master)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=master) [![202205 build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=202205&label=202205)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=202205) [![202111 build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=202111&label=202111)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=202111) [![202106 build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=202106&label=202106)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=202106) [![202012 build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=202012&label=202012)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=202012) [![201911 build](https://dev.azure.com/mssonic/build/_apis/build/status/Azure.sonic-swss?branchName=201911&label=201911)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=15&branchName=201911) # SONiC - SWitch State Service - SWSS ## 描述 SWitch State Service (SWSS) 是一个软件集合,它提供了一个数据库接口,用于网络应用程序和网络交换机硬件之间的通信以及状态表示。 ## 入门指南 ### 前置条件 安装以下依赖项: ``` sudo apt install redis-server sudo apt install libhiredis0.14 sudo apt install libzmq5 libzmq3-dev sudo apt install libboost-serialization1.74.0 sudo apt install libboost1.71-dev sudo apt install libasan6 ``` **注意:** 如果您使用的是 Ubuntu 18.04,请改为安装 `libhiredis0.13`。 访问 [VS 平台的官方 sonic-buildimage Azure 流水线](https://dev.azure.com/mssonic/build/_build?definitionId=142&view=branches),并选择与您尝试构建或安装的 sonic-swss 分支相匹配的分支。然后选择最新成功的构建。 从 Summary(摘要)选项卡中,访问构建产物。 image 下载文件夹 `sonic-buildimage.vs/target/debs/{您主机的 Debian 代号}`。您可以通过运行 `cat /etc/debian_version` 来查看您机器的 Debian 代号。 image 使用 `unzip sonic-buildimage.vs.zip` 解压下载的 zip 文件。然后导航到 `sonic-buildimage.vs/target/debs/{Debian 代号}/` 并安装以下 Debian 软件包: ``` sudo dpkg -i libdashapi_1.0.0_amd64.deb libnl-3-200_3.5.0-1_amd64.deb libnl-3-dev_3.5.0-1_amd64.deb libnl-cli-3-200_3.5.0-1_amd64.deb libnl-cli-3-dev_3.5.0-1_amd64.deb libnl-genl-3-200_3.5.0-1_amd64.deb libnl-genl-3-dev_3.5.0-1_amd64.deb libnl-nf-3-200_3.5.0-1_amd64.deb libnl-nf-3-dev_3.5.0-1_amd64.deb libnl-route-3-200_3.5.0-1_amd64.deb libnl-route-3-dev_3.5.0-1_amd64.deb libprotobuf32_3.21.12-3_amd64.deb libsaimetadata_1.0.0_amd64.deb libsaimetadata-dev_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb libsairedis-dev_1.0.0_amd64.deb libsaivs_1.0.0_amd64.deb libsaivs-dev_1.0.0_amd64.deb libswsscommon_1.0.0_amd64.deb libswsscommon-dev_1.0.0_amd64.deb libteam5_1.31-1_amd64.deb libteamdctl0_1.31-1_amd64.deb libyang_1.0.73_amd64.deb libyang-dev_1.0.73_amd64.deb python3-swsscommon_1.0.0_amd64.deb ``` **注意:** 您也可以 [自己构建这些软件包(针对 VS 平台)](https://github.com/sonic-net/sonic-buildimage/blob/master/README.md)。 现在,您可以直接安装 SONiC SWSS 软件包,也可以从源代码构建然后安装。要安装 `sonic-buildimage.vs/target/debs/{Debian 代号}/` 中已有的 SONiC SWSS 软件包,只需运行以下命令: ``` sudo dpkg -i swss_1.0.0_amd64.deb ``` #### 从源代码安装 安装构建依赖项: ``` sudo apt install libtool sudo apt install autoconf automake sudo apt install dh-exec sudo apt install nlohmann-json3-dev sudo apt install libgmock-dev ``` 在您的主机上克隆 `sonic-swss` 仓库:`git clone https://github.com/sonic-net/sonic-swss.git`。 确保 SAI 头文件存在于 `/usr/include/sai` 中。由于您已经安装了 `libsairedis-dev`、`libsaimetadata-dev` 和 `libsaivs-dev`,情况应该已经如此。如果您自己编译了 `libsairedis`,请确保将 SAI 头文件复制到 `/usr/include/sai`。 您可以使用以下命令从源代码进行编译和安装: ``` ./autogen.sh ./configure make && sudo make install ``` **注意:** 这不会运行位于 `tests/mock_tests` 下的 mock 测试。 您也可以使用以下命令构建 debian 软件包: ``` ./autogen.sh fakeroot debian/rules binary ``` ## 常见问题 #### 找不到 `libboost-serialization1.74.0` 遗憾的是,即使在 Debian 11 (bullseye) 上受支持,`libboost-serialization1.74.0` 在 Ubuntu 20.04 (focal) 上并未得到官方支持。因此,您必须从源代码构建此软件包。您可以使用类似 [这个](https://github.com/ulikoehler/deb-buildscripts/blob/master/deb-boost.sh) 的脚本,但您只需要为 Boost serialization 库创建一个软件包。您还应确保生成的软件包命名为 `libboost-serialization1.74.0`。软件包创建完成后,您可以通过运行 `sudo dpkg -i libboost-serialization1.74.0_1.74.0_amd64.deb` 来安装它。 #### 安装 `libzmq3-dev` 时的依赖问题 如果由于依赖问题无法安装 `libzmq3-dev`,请检查您主机上安装的 `libkrb5` 软件包的版本: ``` sudo dpkg -l | grep "libkrb5" ``` 如果版本不是 `1.17-6ubuntu4.7`,那么您需要安装正确的版本: ``` sudo apt install libkrb5support0=1.17-6ubuntu4.7 sudo apt install libzmq3-dev ``` **警告:** 这可能会删除您系统上已安装的许多软件包。请注意正在删除的内容。 **注意:** 不要安装您下载的 `sonic-buildimage.vs` 文件夹中的 `*krb5*` 软件包。这些软件包的版本较高,会导致依赖问题。 #### 安装某些软件包时的依赖问题 如果您在安装软件包期间遇到依赖问题,可以运行 `sudo apt -f install` 来修复该问题。但请注意,如果 `apt` 无法修复依赖问题,它将尝试删除有问题的软件包。 #### 打开的文件过多 如果在 mock 测试期间收到描述为“Too many open files”的 C++ 异常,您应该检查系统上允许打开的最大文件数: ``` ulimit -a | grep "open files" ``` 您可以通过执行此命令来增加它:`ulimit -n 8192`。请随意更改 `8192`。这个值对我来说运行良好。 **注意:** 此更改仅对当前终端会话有效。如果您希望永久更改,请将 `ulimit -n 8192` 附加到 `~/.bashrc`。 ## 需要帮助? 如有一般问题、安装帮助或故障排除: - [Google Groups 上的 sonicproject](https://groups.google.com/g/sonicproject) 对于错误报告或功能请求,请开启一个 Issue。 ## 贡献指南 有关如何贡献的信息,请参阅[贡献者指南](https://github.com/sonic-net/SONiC/wiki/Becoming-a-contributor)。 ### GitHub 工作流 我们遵循基本的 GitHub Flow。如果您不知道我们在说什么,请查看 [GitHub 官方指南](https://guides.github.com/introduction/flow/)。请注意,合并仅由仓库维护者执行。 执行提交的指南: * 将每次提交隔离到一个组件/错误修复/问题/功能中 * 使用标准的提交消息格式: 例如: * 每位开发人员都应 fork 此仓库,并[将团队添加为贡献者](https://help.github.com/articles/adding-collaborators-to-a-personal-repository) * 将您的更改推送到您的私有 fork,并对此仓库进行“pull-request” * 使用 pull request 进行代码审查 * 使用 issues 来跟踪正在发生的事情
标签:Azure, C++, Python, Redis数据库, SDN, SONiC, SwSS, 中间件, 交换机状态服务, 开源网络, 搜索引擎查询, 数据中心网络, 数据擦除, 无后门, 状态管理, 白盒交换机, 网络同步, 网络基础设施, 网络抽象层, 网络操作系统, 网络设备, 逆向工具, 通信协议