#pan #bindings #path #networking #scion #aware #local

pan_bindings

SCION PAN 路由感知网络库的 FFI 绑定

12 个稳定版本

1.0.11 2024年1月18日
1.0.10 2024年1月17日
1.0.1 2023年12月29日

#3 in #aware

每月 25 次下载
用于 squinn

MIT/Apache

375KB
9K SLoC

Rust 5.5K SLoC // 0.1% comments Go 2K SLoC // 0.3% comments C++ 768 SLoC // 0.1% comments Python 719 SLoC // 0.1% comments

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