发送反馈
Happy
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
Happy 是一款用于对模拟网络拓扑进行轻量级编排的工具。使用该平台在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用 IoT 设备硬件。
这是什么?
Happy 会模拟复杂的网络拓扑。在一台 Linux 计算机上,Happy 可以使用彼此彼此独立的网络堆栈创建多个节点。某些节点可以连接到模拟线程网络,其他节点可以连接到模拟 Wi-Fi、WAN(互联网)或移动网络。
Happy 解决了以下用例的问题:
在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用硬件
在整个网络中执行自动化功能测试
在同一系统上运行多个并发的并行网络,以提高测试吞吐量
Happy 通过创建用户拓扑开销极低的网络拓扑抽象来解决这些问题。用户可以通过单个 shell 命令调用创建复杂的拓扑。Happy 支持交互式使用和自动化脚本。
在开发过程中使用 Happy Shell 命令设置、测试和调试其代码。然后,相同的网络配置和测试程序可能会被编写成脚本,并在自动化测试中使用。
开始
开始使用 Happy 的最简单快捷的方法是完成 Codelab。它将引导用户了解所有 Happy 基础知识,包括:
创建和删除拓扑
将节点连接在一起
保存和恢复拓扑
将拓扑连接到互联网
Weave 基础知识
试用“愉快的 Codelab”使用入门
如需详细了解如何设置和使用 Happy,请参阅设置 和用法 。
架构
快乐模型如下所示:
节点 - Linux 网络命名空间。包含节点在指定网络命名空间内运行的进程。
链接 - Linux 网络接口。Happy 使用 veth
网络设备支持 L3 (IP) 接口,并使用 tap
网络设备提供开箱即用型支持 L2 接口。
网络 - 运行以太网网桥的 Linux 网络命名空间。
实现
Happy 是一个 Python 模块集合。Core Happy 模块为以下各项提供了抽象概念:
管理节点抽象
管理链接
添加、修改和删除关联
分配节点和网络的链接
分配和修改地址分配
管理网络
以统一的方式管理框架的整体状态
Happy 模块实现的大多数抽象都会映射到调用 Linux 网络工具的命令。
Happy 还包含 /plugins
中提供的一组插件。插件包含一组与特定技术相关的功能。例如,/plugins/weave
包含帮助程序封装各种 Weave 应用以在 Happy 中执行的辅助程序。
执行
用户可以通过两种方法构建模拟拓扑:
Shell 命令 - 所有命令都位于 /bin
中。
Python 脚本 - 导入 Happy 模块以在您自己的 Python 脚本中调用 Happy 命令。模块位于 /happy
中。
如需详细了解如何在自己的 Python 脚本中使用 Happy 模块,请参阅 Python 脚本 。
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License , and code samples are licensed under the Apache 2.0 License . For details, see the Google Developers Site Policies . Java is a registered trademark of Oracle and/or its affiliates. The OPENTHREAD and related marks are trademarks of the Thread Group and are used under license.
最后更新时间 (UTC):2021-07-14。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
需要向我们提供更多信息?
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2021-07-14\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2021-07-14。"],[],[]]