mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-06-18 04:50:25 +08:00
172 lines
5.0 KiB
Markdown
172 lines
5.0 KiB
Markdown
# MIR Management
|
||
|
||
MIR管理通信协议允许用户、工具和控制平面程序检索,监视和更改MIR的状态。
|
||
|
||
## 1. MIR管理协议
|
||
|
||
### 1.1 基本机制
|
||
|
||
MIR通信管理协议使用管理通信包(Interest-Data exchange)来进行通信,管理通信包的顶层TLV的TYPE值为1。
|
||
|
||
- **Status Dataset** (状态数据集)
|
||
|
||
> https://redmine.named-data.net/projects/nfd/wiki/StatusDataset
|
||
|
||
状态数据集定义了一个实体集合的状态信息如何作为管理数据包(Management Data)进行编码、分片和发布。这个机制搭配兴趣包数据包交换(Interest-Data exchange)的通信方式可以很方便的对MIR中的各种状态信息进行检索。
|
||
|
||
- **Notification Stream**(通知流)
|
||
|
||
MIR管理通信协议要求实现一个基于事件订阅的通知机制,一旦MIR的相关状态发生改变,可以通过该机制通知对应的管理模块。这个机制可以很有效的对MIR的状态进行监视。
|
||
|
||
- **Control Command**(控制命令)
|
||
|
||
控制命令定义了一系列可以更改MIR状态的命令的请求和回复格式,*以及如何对这些命令进行签名和认证*。这个机制对于更改MIR的状态很有用。
|
||
|
||
### 1.2 模块
|
||
|
||
- **LogicFace Management**(逻辑接口管理模块)
|
||
- 创建和销毁逻辑接口控制命令;
|
||
- 一个数据集(dataset)用于发布 LogicFace 状态和计数器;
|
||
- 一个通知流(Notification Stream),用于通知逻辑接口的创建和销毁事件
|
||
- **FIB Management**(转发表管理模块)
|
||
- 插入、更新和删除FIB条目的控制命令;
|
||
- 一个数据集(dataset)用于发布FIB表的条目信息;
|
||
|
||
### 1.3 管理请求包的基本格式
|
||
|
||
```
|
||
CommandInterest = 1 TLV-LENGTH
|
||
{ InterestIdentifier } => 标识区
|
||
{ Signature } => 签名区
|
||
```
|
||
|
||
- **用于本地管理**:
|
||
|
||
```
|
||
/localhost/mir/<模块名称>/<命令>/<参数>/[版本号]/[分片号]
|
||
```
|
||
|
||
- 模块名称:每个管理模块会有一个唯一的模块名称,例如:`fib-mgmt`
|
||
|
||
- 命令:表示要在对应模块执行的动作,例如:`add`、`list`
|
||
|
||
- 参数:由一个 `ControlParameters` TLV 编码而成,其中包含一系列子 TLV,每个子TLV表示一个请求的参数字段(Field),例如:
|
||
|
||
```
|
||
ControlParameters = CONTROL-PARAMETERS-TYPE TLV-LENGTH
|
||
[LocalFaceUri]
|
||
[RemoteFaceUri]
|
||
```
|
||
|
||
- 版本号:数据集在每次版本更迭时,会将发布的数据状态的版本号加1,可以凭借版本号获取最新的状态信息
|
||
|
||
- 分片号:数据集通常无法用一个Data包装下,需要进行分片发布,分片号指定要拉取的数据分片
|
||
|
||
- **用于单跳接入**(用于使用TCP LogicFace等接入MIR的场景)
|
||
|
||
```
|
||
/localhop/mir/<模块名称>/<命令>/<参数>/[版本号]/[分片号]
|
||
```
|
||
|
||
### 1.4 管理回复包的基本格式
|
||
|
||
```
|
||
CommandData = 1 TLV-LENGTH
|
||
{ DataIdentifier } => 标识区
|
||
{ Signature } => 签名区
|
||
{ => 只读区
|
||
<Payload>
|
||
}
|
||
```
|
||
|
||
回复数据放在管理回复包的 `Payload` 部分,格式为json格式,如果数据较多,需要分片进行传输
|
||
|
||
## 2. LogicFace Management
|
||
|
||
> 模块名称:`minlf-mgmt`
|
||
|
||
### 2.1 控制命令
|
||
|
||
- **`list`**
|
||
|
||
> list 命令用于显示逻辑接口的详细信息
|
||
|
||
```
|
||
mirc lf list [remote <LFURI>] [local <LFURI>] [scheme <SCHEME>]
|
||
```
|
||
|
||
- **`add`**
|
||
|
||
> add 命令用于添加一个逻辑接口
|
||
|
||
```
|
||
mirc lf add remote <LFURI> [[persistency] <PERSISTENCY>] [local <LFURI>] [mtu <MTU>]
|
||
```
|
||
|
||
- **`del`**
|
||
|
||
> del 命令用于删除一个逻辑接口
|
||
|
||
```
|
||
mirc lf del <LFID|LFURI>
|
||
```
|
||
|
||
- **`show`**
|
||
|
||
> show 命令用于展示指定ID的逻辑接口的信息
|
||
|
||
```
|
||
mirc lf show <LFID>
|
||
```
|
||
|
||
### 2.2 OPTIONS
|
||
|
||
- **LFID**
|
||
|
||
LfId 表示逻辑接口在MIR中的唯一数字标识
|
||
|
||
- **LFURI**
|
||
|
||
LfUri 表示本地或者远端的逻辑接口的地址,示例如下:
|
||
|
||
- `tcp://192.168.1.2:13899`
|
||
- `udp://192.168.1.3:13899`
|
||
- `ether://[08:00:27:01:01:01]`
|
||
- `dev://eth0`
|
||
- `unix:///var/run/mir.sock`
|
||
|
||
- **SCHEME**
|
||
|
||
Scheme 表示本地或者远端的接口地址所使用的Uri方案,示例如下:
|
||
|
||
- udp
|
||
- tcp
|
||
- unix
|
||
- dev
|
||
|
||
- **PERSISTENCY**
|
||
|
||
Persistency 参数指定了逻辑接口的持久性,取值可以为 `persistent` (持久的)和 `permanent`(永久的)
|
||
|
||
- `persistent`:拥有 `persistent` 持久性的逻辑接口,在通信过程中发生套接字错误时,会自动关闭并销毁该逻辑接口;
|
||
- `permanent`:拥有 `permanent` 持久性的逻辑接口,在通信过程中如果发生套接字错误是,逻辑接口不会直接销毁,会一直保留,并尝试重新建立套接字连接。
|
||
|
||
- **MTU**
|
||
|
||
Mtu 参数指定了逻辑接口的最大传输单元的大小。
|
||
|
||
## 3. FIB Management
|
||
|
||
> 模块名称:`fib-mgmt`
|
||
|
||
### 3.1 控制命令
|
||
|
||
- **`list`**
|
||
|
||
> list 命令用于展示 FIB 表的信息
|
||
|
||
`mirc fib list `
|
||
|
||
- **`add`**
|
||
|
||
- **`del`** |