dylandreimerink / gobgp-php
dev-master
2017-11-05 21:56 UTC
Requires
- php: >=7.0.0
- google/protobuf: >=3.4.1
- grpc/grpc: ^1.6
- leth/ip-address: 1.1.1
Requires (Dev)
- phpunit/phpunit: 6.4.3
- symfony/var-dumper: 3.4.x-dev
This package is not auto-updated.
Last update: 2024-09-25 07:48:42 UTC
README
GoBGP gRPC 客户端的一个PHP封装
要求
- PHP 7
- gRPC PHP 扩展:https://pecl.php.net/package/gRPC
安装
- 按照以下安装说明安装 gRPC PHP 扩展
- 需要此包:
composer require dylandreimerink/gobgp-php
目标
本项目有两个主要目的
- 如果您想使用 GoBGP API,则必须手动为 PHP 生成 gRPC 客户端代码,这很麻烦。
- 一旦您获得了 GoBGP API,由于从 GoBGP API 发送和接收的大多数数据都是编码的,且文档不完整,因此很难开始。
本项目的目标是解决这两个问题。即使我可能决定将预生成的客户端代码移动到单独的仓库和包中。
到目前为止,只有 GoBGP API 的一小部分被封装,但我希望尽快全面覆盖。完成之后,整个代码库应该接受单元测试。
帮助和贡献总是受欢迎
贡献指南
生成 GoBGP gRPC API 客户端代码
客户端代码是从/api/gobgp.proto 文件生成的,该文件位于 /api/gobgp.proto。此文件采用protocol buffers格式,gRPC 使用 protocol buffers 作为 API 调用的格式。因此,我们需要安装 protoc(protocol buffers 编译器)并编译 gRPC php 插件用于 protoc
步骤-by-步骤
- 首先遵循正常安装说明
- 按照安装说明安装 protoc
- 按照说明安装 gRPC PHP protoc 插件
- 从 GoBGP 获取最新的 .proto 文件,生成最新的客户端代码,并用新生成的客户端代码替换 /lib 中的代码
当前版本客户端代码是从提交 #3678607 的 .proto 文件生成的
文档和参考
大部分工作是在解码和编码到正确的格式。大部分格式来自接受的 BGP RFC 或草案。到目前为止,我使用以下文档来找到我需要的内容
- 基础 BGP FlowSpec RFC - https://tools.ietf.org/html/rfc5575
- IPv6 扩展的 RFC5575 - https://www.ietf.org/archive/id/draft-ietf-idr-flow-spec-v6-08.txt
- L2VPN 扩展的 RFC5575 - https://tools.ietf.org/html/draft-ietf-idr-flowspec-l2vpn-07
- BGP-4 RFC - https://tools.ietf.org/html/rfc4760
- BGP 属性列表 - http://www.networkers-online.com/blog/2012/05/bgp-attributes/
有时 GoBGP 可能会与最新的草案有所不同,在这些情况下,您必须逆向工程格式或查看源代码。
待办事项
- 封装所有 API 调用
- 为所有编解码函数编写单元测试
- 添加规则构建器以进一步简化库的使用
- 创建一种查询和过滤路由的简单方法
想法/用例
- 使用两个GoBGP服务器和中间的一个php-gobgp实例,以便比BGP本身目前可能做到的更高级的输入过滤
- 实现多个路由服务器之间的路由同步,以增加冗余
- 为symfony和laravel创建该库的版本
- 使用GoBGP的MRT转储和注入功能创建一个自动备份系统
- 为BGP公告的变化创建自定义监控