Merge branch 'dev_ck_v2.1_feature_enhancement#1118' into 'dev_ck_v2.1'

修改case4,增加帧头偏移设置、查询

See merge request ucp/driver/ucp4008_platform_arm!29
This commit is contained in:
Xianfeng Du 2023-10-18 05:44:08 +00:00
commit fbb83c88ad

View File

@ -44,6 +44,11 @@
#define SPU_OAM_BASE_DELAY_QRY_RSP 0x203
#define SPU_OAM_FIBER_DELAY_QRY_REQ 0x204
#define SPU_OAM_FIBER_DELAY_QRY_RSP 0x205
#define SPU_OAM_FRAME_HEAD_OFFSET_REQ 0x206
#define SPU_OAM_FRAME_HEAD_OFFSET_RSP 0x207
#define SPU_OAM_FRAME_HEAD_OFFSET_QRY_REQ 0x208
#define SPU_OAM_FRAME_HEAD_OFFSET_QRY_RSP 0x209
#define MSG_TRANSFER_OAM_MSG_TYPE 0x125
extern uint8_t guc_oam;
@ -95,12 +100,30 @@ typedef struct tSpuOamFiberDelayQryRsp {
uint32_t u32t14_val;
} SpuOamFiberDelayQryRsp_t;
typedef struct tSpuOamFrameHeadOffsetReq {
uint16_t u16frame_head_offset;
uint8_t u8rsv[2];
} SpuOamFrameHeadOffsetReq_t;
typedef struct tSpuOamFrameHeadOffsetRsp {
uint8_t u8result;
uint8_t u8rsv[3];
} SpuOamFrameHeadOffsetRsp_t;
typedef struct tSpuOamFrameHeadOffsetQryRsp {
uint8_t u8result;
uint8_t u8rsv;
uint16_t u16frame_head_offset;
}SpuOamFrameHeadOffsetQryRsp_t;
uint32_t rx_callback_oam_spu(const char* buf,uint32_t payloadSize)
{
OamMsgTransferHeader_t *header_ptr = NULL;
SpuOamBaseDelaySetRsp_t *oam_base_delay_set_rsp_ptr = NULL;
SpuOamBaseDelayQryRsp_t *oam_base_delay_qry_rsp_ptr = NULL;
SpuOamFiberDelayQryRsp_t *oam_fiber_delay_qry_rsp_ptr = NULL;
SpuOamFrameHeadOffsetRsp_t *oam_frame_head_offset_rsp_ptr = NULL;
SpuOamFrameHeadOffsetQryRsp_t *oam_frame_head_offset_qry_rsp_ptr = NULL;;
header_ptr = (OamMsgTransferHeader_t *)buf;
header_ptr->msgLen = payloadSize;
@ -131,6 +154,15 @@ uint32_t rx_callback_oam_spu(const char* buf,uint32_t payloadSize)
oam_fiber_delay_qry_rsp_ptr->u8fiber_port, oam_fiber_delay_qry_rsp_ptr->u8result, \
oam_fiber_delay_qry_rsp_ptr->u8rsv[0], oam_fiber_delay_qry_rsp_ptr->u8rsv[1], oam_fiber_delay_qry_rsp_ptr->u32t14_val);
break;
case SPU_OAM_FRAME_HEAD_OFFSET_RSP:
oam_frame_head_offset_rsp_ptr = (SpuOamFrameHeadOffsetRsp_t *)(buf+sizeof(OamMsgTransferHeader_t));
printf("SPU_OAM_FRAME_HEAD_OFFSET_RSP u8result:%u\n", oam_frame_head_offset_rsp_ptr->u8result);
break;
case SPU_OAM_FRAME_HEAD_OFFSET_QRY_RSP:
oam_frame_head_offset_qry_rsp_ptr = (SpuOamFrameHeadOffsetQryRsp_t *)(buf+sizeof(OamMsgTransferHeader_t));
printf("SPU_OAM_FRAME_HEAD_OFFSET_QRY_RSP u8result:%u u16frame_head_offset:0x%x\n", oam_frame_head_offset_qry_rsp_ptr->u8result, oam_frame_head_offset_qry_rsp_ptr->u16frame_head_offset);
break;
}
return payloadSize;
@ -419,6 +451,114 @@ void oam_msg_fiber_deley_qry_test()
return;
}
void oam_msg_frame_head_offset_test()
{
uint32_t size = 24;
char* buf;
uint32_t availableSize,offset;
OamMsgTransferHeader_t stOamMsg;
SpuOamFrameHeadOffsetReq_t stOamFrameHeadOffset;
uint16_t cu_flag = C_PLANE;
HandleId_t handler;
handler.port_id = 0;
handler.inst_id = 0;
handler.type_id = OAM;
int32_t ret = msg_transfer_send_start(handler.value, cu_flag);
/************C_PLANE***************/
ret = msg_transfer_alloc_msg(handler.value, cu_flag, size, &buf, &availableSize, &offset);
if ( SUCCESS != ret) {
UCP_PRINT_ERROR("oam_msg_test call msg_transfer_alloc_msg err.");
return ;
}
stOamMsg.cellIndex = 0;
stOamMsg.numMsg = 1;
stOamMsg.msgType = SPU_OAM_FRAME_HEAD_OFFSET_REQ;
stOamMsg.msgLen = size;
stOamFrameHeadOffset.u16frame_head_offset = 0x12ab;
//memset(buf, 0, size);
//memcpy((uint8_t *)stOamMsg.msgData, (uint8_t *)&stOamDelayReq, sizeof(SpuOamBaseDelaySetReq_t));
memcpy(buf, (uint8_t *)&stOamMsg, sizeof(OamMsgTransferHeader_t));
memcpy((uint8_t *)(buf+sizeof(OamMsgTransferHeader_t)), (uint8_t *)&stOamFrameHeadOffset, sizeof(SpuOamFrameHeadOffsetReq_t));
ret = msg_transfer_send_msg(handler.value, cu_flag, (uint8_t *)buf, offset, size);
if ( SUCCESS != ret) {
UCP_PRINT_ERROR("msg_transfer_send_msg send error\r\n");
}
msg_transfer_send_end(handler.value,cu_flag);
printf("\n-----------------------------------------------------------\n");
for (int i = 0; i < size;i++)
{
printf("%02x ", buf[i]);
if ((i & 0x7) == 0x7)
{
printf("\n");
}
}
return;
}
void oam_msg_frame_head_offset_qry_test()
{
uint32_t size = 24;
char* buf;
uint32_t availableSize,offset;
OamMsgTransferHeader_t stOamMsg;
uint16_t cu_flag = C_PLANE;
HandleId_t handler;
handler.port_id = 0;
handler.inst_id = 0;
handler.type_id = OAM;
int32_t ret = msg_transfer_send_start(handler.value, cu_flag);
/************C_PLANE***************/
ret = msg_transfer_alloc_msg(handler.value, cu_flag, size, &buf, &availableSize, &offset);
if ( SUCCESS != ret) {
UCP_PRINT_ERROR("oam_msg_test call msg_transfer_alloc_msg err.");
return ;
}
stOamMsg.cellIndex = 0;
stOamMsg.numMsg = 1;
stOamMsg.msgType = SPU_OAM_FRAME_HEAD_OFFSET_QRY_REQ;
stOamMsg.msgLen = size;
//memset(buf, 0, size);
//memcpy((uint8_t *)stOamMsg.msgData, (uint8_t *)&stOamDelayReq, sizeof(SpuOamBaseDelaySetReq_t));
memcpy(buf, (uint8_t *)&stOamMsg, sizeof(OamMsgTransferHeader_t));
ret = msg_transfer_send_msg(handler.value, cu_flag, (uint8_t *)buf, offset, size);
if ( SUCCESS != ret) {
UCP_PRINT_ERROR("msg_transfer_send_msg send error\r\n");
}
msg_transfer_send_end(handler.value,cu_flag);
printf("\n-----------------------------------------------------------\n");
for (int i = 0; i < size;i++)
{
printf("%02x ", buf[i]);
if ((i & 0x7) == 0x7)
{
printf("\n");
}
}
return;
}
int32_t test_case(uint32_t argc, int32_t* argvp)
{
@ -443,6 +583,12 @@ int32_t test_case(uint32_t argc, int32_t* argvp)
case 3:
oam_msg_fiber_deley_qry_test();
break;
case 4:
oam_msg_frame_head_offset_test();
break;
case 5:
oam_msg_frame_head_offset_qry_test();
break;
}
guc_oam = 0;
usleep(500);