You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.6 KiB
175 lines
4.6 KiB
1 month ago
|
# LTEClient LogModelGuessInit 方法实现说明
|
||
|
|
||
|
## 概述
|
||
|
|
||
|
本文档说明了在 `LTEClient` 类中实现的 `LogModelGuessInit` 和 `LogModelGuess` 方法,这些方法参考了 JavaScript 版本 `client.js` 中的 `logModelGuessInit` 和 `logModelGuess` 方法。
|
||
|
|
||
|
## 实现的功能
|
||
|
|
||
|
### 1. LogModelGuessInit 方法
|
||
|
|
||
|
```csharp
|
||
|
public void LogModelGuessInit()
|
||
|
```
|
||
|
|
||
|
**功能:**
|
||
|
- 初始化模型猜测机制
|
||
|
- 如果客户端没有设置模型,尝试根据模型提示自动设置
|
||
|
- 初始化层猜测字典,用于后续的模型自动识别
|
||
|
|
||
|
**实现逻辑:**
|
||
|
1. 检查客户端是否已设置模型
|
||
|
2. 如果没有设置模型,尝试所有可能的模型类型
|
||
|
3. 如果无法通过提示确定模型,设置默认模型为 "MME"
|
||
|
4. 初始化层猜测字典,标记所有层为未出现状态
|
||
|
|
||
|
### 2. LogModelGuess 方法
|
||
|
|
||
|
```csharp
|
||
|
public void LogModelGuess(List<Dictionary<string, object>> logs)
|
||
|
```
|
||
|
|
||
|
**功能:**
|
||
|
- 根据日志中的层信息猜测客户端模型类型
|
||
|
- 使用层配置和方向信息来过滤可能的模型
|
||
|
- 当确定唯一模型时自动设置
|
||
|
|
||
|
**实现逻辑:**
|
||
|
1. 遍历所有日志,标记出现的层
|
||
|
2. 根据层配置过滤支持的模型
|
||
|
3. 使用层方向配置进一步缩小模型范围
|
||
|
4. 当找到唯一匹配的模型时自动设置
|
||
|
|
||
|
## 模型列表
|
||
|
|
||
|
支持的模型类型(与 JavaScript 版本一致):
|
||
|
|
||
|
```csharp
|
||
|
var modelList = new List<string>
|
||
|
{
|
||
|
"RUE", "UE", "PROBE", "ENB", "N3IWF", "MBMSGW", "MME", "IMS", "LICENSE", "MONITOR"
|
||
|
};
|
||
|
```
|
||
|
|
||
|
## 层配置
|
||
|
|
||
|
实现了完整的层配置,包括:
|
||
|
|
||
|
### 支持的层类型
|
||
|
- **物理层**: PHY, MAC, RLC, PDCP
|
||
|
- **控制层**: RRC, NAS
|
||
|
- **传输层**: GTPU, GTPC, IP
|
||
|
- **接口层**: S1AP, NGAP, X2AP, XnAP, M2AP
|
||
|
- **应用层**: IMS, SIP, MEDIA, RTP
|
||
|
- **核心网**: S6, S13, SGsAP, SBcAP
|
||
|
- **5G接口**: N8, N12, N13, N17, N50
|
||
|
- **其他**: IKEV2, IPSEC, TRX, MON, EVENT, ALARM
|
||
|
|
||
|
### 层方向配置
|
||
|
|
||
|
每个层都有方向配置,用于确定哪些模型支持该层:
|
||
|
|
||
|
```csharp
|
||
|
// 示例:PHY层的方向配置
|
||
|
"PHY" => new Dictionary<string, int> { { "UE", 2 }, { "PROBE", 3 }, { "ENB", 1 } }
|
||
|
```
|
||
|
|
||
|
方向值含义:
|
||
|
- `1`: 上行 (UL)
|
||
|
- `2`: 下行 (DL)
|
||
|
- `3`: 双向或特殊
|
||
|
|
||
|
## 使用示例
|
||
|
|
||
|
```csharp
|
||
|
var client = new LTEClient(config, logsManager);
|
||
|
|
||
|
// 初始化模型猜测
|
||
|
client.LogModelGuessInit();
|
||
|
|
||
|
// 处理日志时进行模型猜测
|
||
|
var logs = new List<Dictionary<string, object>>
|
||
|
{
|
||
|
new Dictionary<string, object> { { "layer", "PHY" } },
|
||
|
new Dictionary<string, object> { { "layer", "RRC" } }
|
||
|
};
|
||
|
|
||
|
client.LogModelGuess(logs);
|
||
|
|
||
|
// 检查是否自动设置了模型
|
||
|
if (!string.IsNullOrEmpty(client.Config.Model))
|
||
|
{
|
||
|
Console.WriteLine($"自动识别的模型: {client.Config.Model}");
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## 与 JavaScript 版本的对应关系
|
||
|
|
||
|
### JavaScript 版本
|
||
|
```javascript
|
||
|
logModelGuessInit: function () {
|
||
|
if (!this.config.model) {
|
||
|
if (!this.tryModelHint(modelList)) {
|
||
|
this.setModel('MME'); // Default
|
||
|
}
|
||
|
this.modelGuess = {};
|
||
|
for (var j in layerConfig) {
|
||
|
this.modelGuess[j] = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### C# 版本
|
||
|
```csharp
|
||
|
public void LogModelGuessInit()
|
||
|
{
|
||
|
if (string.IsNullOrEmpty(Config.Model))
|
||
|
{
|
||
|
var modelList = new List<string> { "RUE", "UE", "PROBE", "ENB", "N3IWF", "MBMSGW", "MME", "IMS", "LICENSE", "MONITOR" };
|
||
|
if (!TryModelHint(modelList))
|
||
|
{
|
||
|
SetModel("MME"); // 默认模型
|
||
|
}
|
||
|
|
||
|
_modelGuess = new Dictionary<string, bool>();
|
||
|
var layerConfig = GetLayerConfig();
|
||
|
foreach (var layer in layerConfig.Keys)
|
||
|
{
|
||
|
_modelGuess[layer] = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## 技术特点
|
||
|
|
||
|
### 1. 自动模型识别
|
||
|
- 根据日志内容自动识别客户端类型
|
||
|
- 支持多种模型类型的智能匹配
|
||
|
|
||
|
### 2. 层配置驱动
|
||
|
- 基于完整的层配置进行模型判断
|
||
|
- 考虑层的方向信息进行精确匹配
|
||
|
|
||
|
### 3. 容错处理
|
||
|
- 当无法确定唯一模型时保持当前状态
|
||
|
- 提供默认模型作为后备方案
|
||
|
|
||
|
### 4. 性能优化
|
||
|
- 使用字典进行快速查找
|
||
|
- 避免重复的模型猜测计算
|
||
|
|
||
|
## 相关文件
|
||
|
|
||
|
- `TestLogs/LTEMvcApp/Models/LTEClient.cs` - 主要实现文件
|
||
|
- `TestLogs/LTEMvcApp/README_SetModel_Implementation.md` - SetModel 方法实现说明
|
||
|
- `ltewww-linux-2023-03-17/client.js` - JavaScript 参考实现
|
||
|
- `ltewww-linux-2023-03-17/logs.js` - 层配置参考
|
||
|
|
||
|
## 未来改进
|
||
|
|
||
|
1. **集成 LogsManager**: 将层配置从 LogsManager 获取,而不是硬编码
|
||
|
2. **增强猜测算法**: 添加更多启发式规则提高猜测准确性
|
||
|
3. **配置化**: 支持自定义模型列表和层配置
|
||
|
4. **性能优化**: 缓存层配置和方向信息
|