|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Text;
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using CoreAgent.ProtocolClient.BuildProtocolParser;
|
|
|
|
|
|
|
|
namespace CoreAgent.ProtocolClient.Models
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// 构建协议日志模型
|
|
|
|
/// </summary>
|
|
|
|
public class BuildProtocolLog
|
|
|
|
{
|
|
|
|
#region 基础属性
|
|
|
|
/// <summary>
|
|
|
|
/// 日志唯一标识符
|
|
|
|
/// </summary>
|
|
|
|
public int Id { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 时间戳(毫秒)
|
|
|
|
/// </summary>
|
|
|
|
public long Timestamp { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 协议层(PHY, RRC, NAS, MAC等)
|
|
|
|
/// </summary>
|
|
|
|
public string Layer { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
|
|
/// 传输方向(UL/DL)
|
|
|
|
/// </summary>
|
|
|
|
public int Direction { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 消息内容
|
|
|
|
/// </summary>
|
|
|
|
public string Message { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
|
|
/// 消息信息类型
|
|
|
|
/// </summary>
|
|
|
|
public int? Info { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// UE标识符
|
|
|
|
/// </summary>
|
|
|
|
public int? UeId { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// RNTI(无线网络临时标识符)
|
|
|
|
/// </summary>
|
|
|
|
public int? Rnti { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 日志数据内容
|
|
|
|
/// </summary>
|
|
|
|
public List<string> Data { get; set; } = new();
|
|
|
|
/// <summary>
|
|
|
|
/// 是否已解码
|
|
|
|
/// </summary>
|
|
|
|
public bool Decoded { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 标记信息
|
|
|
|
/// </summary>
|
|
|
|
public string? Marker { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// SIP原始消息内容
|
|
|
|
/// </summary>
|
|
|
|
public string? Msg0 { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 小区标识(所有层通用)
|
|
|
|
/// </summary>
|
|
|
|
public int? Cell { get; set; }
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region PHY层相关属性
|
|
|
|
public PhyLayerFields Phy { get; set; } = new();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 数据相关属性
|
|
|
|
public DataLayerFields DataInfo { get; set; } = new();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region MAC层相关属性
|
|
|
|
public MacLayerFields Mac { get; set; } = new();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region
|
|
|
|
public SIPLayerFields SIP { get; set; } = new ();
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
// PHY层分组
|
|
|
|
public class PhyLayerFields
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// 物理信道类型
|
|
|
|
/// </summary>
|
|
|
|
public string? Channel { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 帧号
|
|
|
|
/// </summary>
|
|
|
|
public int? Frame { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 子帧号
|
|
|
|
/// </summary>
|
|
|
|
public int? Subframe { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 时隙号
|
|
|
|
/// </summary>
|
|
|
|
public int? Slot { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 符号号
|
|
|
|
/// </summary>
|
|
|
|
public int? Symbol { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 天线端口
|
|
|
|
/// </summary>
|
|
|
|
public int? AntennaPort { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 资源块起始位置
|
|
|
|
/// </summary>
|
|
|
|
public int? RbStart { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 资源块数量
|
|
|
|
/// </summary>
|
|
|
|
public int? RbCount { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 调制编码方案
|
|
|
|
/// </summary>
|
|
|
|
public int? Mcs { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 传输块大小
|
|
|
|
/// </summary>
|
|
|
|
public int? Tbs { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// HARQ进程ID
|
|
|
|
/// </summary>
|
|
|
|
public int? HarqId { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// HARQ新数据指示
|
|
|
|
/// </summary>
|
|
|
|
public bool? HarqNdi { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// HARQ重传次数
|
|
|
|
/// </summary>
|
|
|
|
public int? HarqRedundancyVersion { get; set; }
|
|
|
|
}
|
|
|
|
|
|
|
|
// 数据相关分组
|
|
|
|
public class DataLayerFields
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// IP长度
|
|
|
|
/// </summary>
|
|
|
|
public int? IpLen { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// SDU长度
|
|
|
|
/// </summary>
|
|
|
|
public int? SduLen { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 链路ID
|
|
|
|
/// </summary>
|
|
|
|
public LinkIds? LinkIds { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 信号记录
|
|
|
|
/// </summary>
|
|
|
|
public Dictionary<string, object>? SignalRecord { get; set; }
|
|
|
|
}
|
|
|
|
|
|
|
|
// MAC层分组
|
|
|
|
public class MacLayerFields
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// 功率余量报告(PHR)
|
|
|
|
/// </summary>
|
|
|
|
public int? Phr { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 上行缓冲区大小
|
|
|
|
/// </summary>
|
|
|
|
public int? UlBufferSize { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// MAC填充长度
|
|
|
|
/// </summary>
|
|
|
|
public int? MacPad { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// MAC数据长度
|
|
|
|
/// </summary>
|
|
|
|
public int? MacLen { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// 定时提前量(TA)
|
|
|
|
/// </summary>
|
|
|
|
public int? Ta { get; set; }
|
|
|
|
}
|
|
|
|
|
|
|
|
public class LinkIds
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Core链路ID
|
|
|
|
/// </summary>
|
|
|
|
public int? Core { get; set; }
|
|
|
|
/// <summary>
|
|
|
|
/// Ran链路ID
|
|
|
|
/// </summary>
|
|
|
|
public int? Ran { get; set; }
|
|
|
|
}
|
|
|
|
|
|
|
|
public class SIPLayerFields
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// PLMN标识
|
|
|
|
/// </summary>
|
|
|
|
public string? Plmn { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
|
|
/// IMSI标识
|
|
|
|
/// </summary>
|
|
|
|
public string? IMSI { get; set; } = string.Empty;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// BuildProtocolLog扩展方法类
|
|
|
|
/// 提供BuildProtocolLog相关的工具方法和扩展功能
|
|
|
|
/// </summary>
|
|
|
|
public static class BuildProtocolLogExtensions
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// 获取协议日志数据的字符串表示
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="log">协议日志对象</param>
|
|
|
|
/// <returns>格式化的日志数据字符串</returns>
|
|
|
|
public static string GetProtocolLogData(this BuildProtocolLog log)
|
|
|
|
{
|
|
|
|
return string.Join("\n", log.Data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|