12 个稳定版本
1.0.11 | 2024年1月18日 |
---|---|
1.0.10 | 2024年1月17日 |
1.0.1 | 2023年12月29日 |
#3 in #aware
每月 25 次下载
用于 squinn
375KB
9K SLoC
C、C++ 和 Python 的 SCION PAN 绑定
SCION 互联网架构项目的 PAN(路由感知网络)库的语言绑定。PAN 库和其他 SCION 示例应用(用 Go 语言编写)可以在 scion-apps 仓库中找到:[https://github.com/netsec-ethz/scion-apps](https://github.com/netsec-ethz/scion-apps)
有关 SCION 的更多信息:https://www.scion.org/
要求
SCION 的开源实现大部分是用 Go 语言编写的。此仓库中的绑定使用 Cgo 将 Go 函数导出为 C。然后可以从 C++ 和 Python 包装器中调用这些导出的 C 函数。因此,除了 C 和 C++ 编译器外,您还需要 Go 编译器。Python 绑定需要安装 Python 3。
Cgo 包装器本身所需的最低 Go 版本是 Go 1.17。由于此项目依赖于 scion-apps,因此您需要能够编译 scion-apps 的 Go 版本。目前 scion-apps 支持 Go 版本 1.19 和 1.20。代码已在 Go 版本 1.20.11 上进行了测试。
如果您已安装不受支持的 Go 版本,则可以下载 Go 的单独副本,并在 CMake 缓存变量 GO_BINARY
(默认为 go
)中指定 go
二进制的绝对路径。Go 本身可以安装附加版本,例如。
go install golang.org/dl/go1.20.11@latest
# Go will usually install the new go binary in `~/go/bin/`. Add this directrory
# to PATH or use the full path for the next command.
go1.20.11 download
# Run make with -D GO_BINARY=$(which go1.20.11)
构建 C++ 绑定需要独立的(非 boost)Asio。C++ 示例在 Linux 上需要 ncurses。
构建
CMake 作为 Makefile 生成器使用。
Linux
发布版
mkdir -p build/release
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=ON -B build/release
cmake --build build/release
调试版
mkdir -p build/debug
cmake -D CMAKE_BUILD_TYPE=Debug -D BUILD_SHARED_LIBS=ON -B build/debug
cmake --build build/debug
安装(默认为 /usr/local)
sudo cmake --install build/release
sudo ldconfig
这将安装以下文件
${CMAKE_INSTALL_PREFIX}/include/pan/pan.h
${CMAKE_INSTALL_PREFIX}/include/pan/pan_cdefs.h
${CMAKE_INSTALL_PREFIX}/lib/libpan.a
${CMAKE_INSTALL_PREFIX}/lib/libpan.so
${CMAKE_INSTALL_PREFIX}/lib/libpancpp.so.1.0.0
${CMAKE_INSTALL_PREFIX}/lib/libpancpp.so.1
${CMAKE_INSTALL_PREFIX}/lib/libpancpp.so
${CMAKE_INSTALL_PREFIX}/include/pan/pan.hpp
${CMAKE_INSTALL_PREFIX}/include/pan/go_handle.hpp
${CMAKE_INSTALL_PREFIX}/bin/scion-echo
${CMAKE_INSTALL_PREFIX}/bin/scion-echo-async
库的调试版本具有 d
后缀,可以与发布版本并行安装。
Windows 10/11(MSYS2 MinGW)
安装 MSYS2 和 Go。以下 MSYS2 包是必需的
pacman -Sy
pacman -S \
mingw-w64-ucrt-x86_64-gcc \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-asio
打开 MSYS2 UCRT64 环境,导航到项目根目录(Windows 驱动器字母可作为 /c
等使用)。
mkdir build
cmake -D BUILD_SHARED_LIBS=ON -D GO_BINARY=$USERPROFILE/go/bin/go1.20.11 -G 'Ninja Multi-Config' -B build
# Release:
cmake --build build --config Release
# Debug:
cmake --build build --config Debug
可以安装头文件和二进制文件
cmake --install build --config Release --prefix /usr/local
Doxygen 文档
您可以通过在项目的根目录中运行 doxygen
来在 docs/gen
生成 API 文档。
使用绑定
对于 C
- 包含
pan/pan.h
并与-lpan
链接。
对于 C++
- 包含
pan/pan.hpp
并与-lpancpp
链接。
对于 Python
- 确保 Python 可以找到
python
目录的内容,例如,通过将其添加到PYTHONPATH
并导入模块(import pan
)
示例应用
examples
目录包含简单的 echo 服务器/客户端示例,演示了阻塞和非阻塞 IO。
使用示例(假设来自 SCION 存储库的 tiny4.topo
拓扑)
# Server
export SCION_DAEMON_ADDRESS=127.0.0.19:30255
scion-echo --local 127.0.0.1:51000 # blocking
scion-echo-async --local 127.0.0.1:51000 # non-blocking
# Client
export SCION_DAEMON_ADDRESS=127.0.0.27:30255
scion-echo --remote 1-ff00:0:111,127.0.0.1:51000 # blocking
scion-echo-async --remote 1-ff00:0:111,127.0.0.1:51000 # non-blocking
Python 版本
# Server
export PYTHONPATH=${PWD}/python:${PYTHONPATH}
export SCION_DAEMON_ADDRESS=127.0.0.19:30255
examples/python/echo.py --local 127.0.0.1:51000 # blocking
examples/python/echo.py --async --local 127.0.0.1:51000 # non-blocking
# Client
export PYTHONPATH=${PWD}/python:${PYTHONPATH}
export SCION_DAEMON_ADDRESS=127.0.0.27:30255
examples/python/echo.py --remote 1-ff00:0:111,127.0.0.1:51000 # blocking
examples/python/echo.py --async --remote 1-ff00:0:111,127.0.0.1:51000 # non-blocking
依赖关系
~13–26MB
~390K SLoC