diff options
| author | yangwei <[email protected]> | 2023-11-16 15:30:51 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2023-11-16 15:30:51 +0800 |
| commit | 3b5b2bd42fa57f3044f4dd42f88ab80fd563a899 (patch) | |
| tree | 5008ba66cc01bca3d49cc04835c2b8af38cce645 | |
| parent | f0521c6fd95e8e5e28b430dd252fa63024ffa0ad (diff) | |
✨ feat(sapp_inject_ctrl_data): 发送控制信息至所有用marsio打开的设备v4.3.32
| -rw-r--r-- | include/public/stream_inc/sapp_inject.h | 2 | ||||
| -rw-r--r-- | src/packet_io/packet_io_marsio.c | 33 | ||||
| -rw-r--r-- | src/packet_io/sapp_inject.c | 5 |
3 files changed, 40 insertions, 0 deletions
diff --git a/include/public/stream_inc/sapp_inject.h b/include/public/stream_inc/sapp_inject.h index 3ead848..ed38fac 100644 --- a/include/public/stream_inc/sapp_inject.h +++ b/include/public/stream_inc/sapp_inject.h @@ -6,6 +6,7 @@ extern "C" { #endif #include "stream_base.h" +#include "stream_control.h" enum sapp_inject_opt{ SIO_DEFAULT = (1<<0), /* ������ֻ���봿����, ��ƽ̨����Э��淶���쵱ǰ��Ĵ�����IPͷ��, ���������, ����������Ƕ�ײ��ͷ�� */ @@ -29,6 +30,7 @@ int sapp_inject_pkt(struct streaminfo *stream, enum sapp_inject_opt sio, const v int sapp_inject_ctrl_pkt(struct streaminfo *stream, enum sapp_inject_opt sio, const void *payload, int payload_len, unsigned char snd_routedir); +int sapp_inject_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq); #ifdef __cplusplus } diff --git a/src/packet_io/packet_io_marsio.c b/src/packet_io/packet_io_marsio.c index 43af6ff..ae2adef 100644 --- a/src/packet_io/packet_io_marsio.c +++ b/src/packet_io/packet_io_marsio.c @@ -488,7 +488,40 @@ struct rawpkt_metadata *marsio_dl_io_get1_rawpkt_meta(const raw_pkt_t *raw_pkt, return meta;
}
+int marsio_send_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq)
+{
+ if(data == NULL || datalen <= 0 || sids == NULL) return -1;
+
+ if(!ptr_marsio_buff_free || !ptr_marsio_buff_malloc_global ||
+ !ptr_marsio_buff_set_ctrlbuf || !ptr_marsio_buff_set_metadata ||
+ !ptr_marsio_buff_set_sid_list || !ptr_marsio_buff_append || !ptr_marsio_send_burst_with_options)return -1;
+
+ int ret;
+ marsio_buff_t *send_mbuf[1];
+ uint16_t send_option = MARSIO_SEND_OPT_REHASH;
+ ret = ptr_marsio_buff_malloc_global(sapp_marsio4_instance, send_mbuf, 1, MARSIO_SOCKET_ID_ANY, thread_seq);
+ if((ret < 0) || (NULL == send_mbuf[0]))return -1;
+
+ /* �˴�ʹ��append������mtod, append�ڲ�ʵ�ʰ�����set datalen�IJ��� */
+ char *real_buf = ptr_marsio_buff_append(send_mbuf[0], datalen);
+ if(NULL == real_buf){
+ ptr_marsio_buff_free(sapp_marsio4_instance, send_mbuf, 1, MARSIO_SOCKET_ID_ANY, thread_seq);
+ return -1;
+ }
+ memcpy(real_buf, data, datalen);
+ int zero=0;
+ ptr_marsio_buff_set_ctrlbuf(send_mbuf[0]);
+ ptr_marsio_buff_set_metadata(send_mbuf[0], MR_BUFF_PAYLOAD_OFFSET, (void *)&(zero), sizeof(unsigned short));
+ ptr_marsio_buff_set_metadata(send_mbuf[0], MR_BUFF_SESSION_ID, (void *)&(zero), sizeof(unsigned long));
+ ptr_marsio_buff_set_sid_list(send_mbuf[0], sids->sid_list, sids->sz_sidlist);
+ for(int i = 0; i < g_mr4_device_num; i++)
+ {
+ marsio_pkt_dump(thread_seq, send_mbuf[0], PKT_CLASSIFY_INJECT);
+ ret = ptr_marsio_send_burst_with_options(g_mr4_sendpath_up_set[i], thread_seq, send_mbuf, 1, send_option);
+ }
+ return ret;
+}
void marsio_dl_io_set_rawpkt_meta(const raw_pkt_t *raw_pkt, void *send_pkt_io_reference, unsigned char route_dir)
{
diff --git a/src/packet_io/sapp_inject.c b/src/packet_io/sapp_inject.c index 48fe5a4..aec05a6 100644 --- a/src/packet_io/sapp_inject.c +++ b/src/packet_io/sapp_inject.c @@ -98,6 +98,11 @@ int sapp_inject_ctrl_pkt(struct streaminfo *stream, enum sapp_inject_opt sio, co return __sapp_inject_ctrl_pkt(stream, sio, payload, payload_len, snd_routedir); } +extern int marsio_send_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq); +int sapp_inject_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq) +{ + return marsio_send_ctrl_data(data, datalen, sids, thread_seq); +} #ifdef __cplusplus } |
