summaryrefslogtreecommitdiff
path: root/src/packet_io/sendpacket.c
diff options
context:
space:
mode:
authoryangwei <[email protected]>2023-08-15 13:44:18 +0800
committeryangwei <[email protected]>2023-08-15 13:46:04 +0800
commit613c162cf985a03a6dd2c5bcdf6255f027073430 (patch)
treef9b7a5d86deed2b79282fcfa0a2f0dc262eebffc /src/packet_io/sendpacket.c
parentcb19a43355d241e195781d7476acaf57a3aeb932 (diff)
✨ feat(inject_pkt_prepend_segment_id): support set sid for inject pkt
Diffstat (limited to 'src/packet_io/sendpacket.c')
-rw-r--r--src/packet_io/sendpacket.c69
1 files changed, 41 insertions, 28 deletions
diff --git a/src/packet_io/sendpacket.c b/src/packet_io/sendpacket.c
index 090b194..609e8a1 100644
--- a/src/packet_io/sendpacket.c
+++ b/src/packet_io/sendpacket.c
@@ -2962,26 +2962,30 @@ int __sapp_inject_pkt(struct streaminfo *raw_stream, enum sapp_inject_opt sio,
inject_stream = raw_stream;
inject_stream_pr = (struct streaminfo_private *)raw_stream;
local_sys_stat = &sapp_global_val->mthread_volatile[thread_num]->sys_stat;
- if((SIO_EXCLUDE_THIS_LAYER_HDR & sio) != 0){
- /* ������ǰ�� */
- inject_stream = raw_stream->pfather;
- inject_stream_pr = (struct streaminfo_private *)inject_stream;
- /* ����������ʱָ����SIO_EXCLUDE_THIS_LAYER_HDR, ˵���ڲ���Ԫ�����ɲ�������, ����kni,
- һ�㲻�����ߵ�build_pkt�ĺ�����, �˴���Ҫ����ip��������bloom filter */
- if(sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_all_inject != 0){
- sendpkt_dup_pkt_mark_stream(raw_stream, (char *)payload);
- }
- }else{
- /*
- 2021-09-18 fix bug:
- ԭ����Ipv4����build-args, ԭ������ipv4��tcp��ͷ����ָ��,
- ��Ϊipv6Ҳ�� build_args,
- ������build_net_layer_tcp()ʱ�ж�build_tcp_args��NULL, ��ʹ��������, �����Ͳ�����!!
- */
- set_build_layer_tcp_args(thread_num, TH_PUSH|TH_ACK, MESA_rand_range(1000, 1460), 0);
- }
-
- raw_stream_pr = (struct streaminfo_private *)raw_stream;
+ if ((SIO_EXCLUDE_THIS_LAYER_HDR & sio) != 0)
+ {
+ /* ������ǰ�� */
+ inject_stream = raw_stream->pfather;
+ inject_stream_pr = (struct streaminfo_private *)inject_stream;
+ /* ����������ʱָ����SIO_EXCLUDE_THIS_LAYER_HDR, ˵���ڲ���Ԫ�����ɲ�������, ����kni,
+ һ�㲻�����ߵ�build_pkt�ĺ�����, �˴���Ҫ����ip��������bloom filter */
+ if (sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_all_inject != 0)
+ {
+ sendpkt_dup_pkt_mark_stream(raw_stream, (char *)payload);
+ }
+ }
+ else
+ {
+ /*
+ 2021-09-18 fix bug:
+ ԭ����Ipv4����build-args, ԭ������ipv4��tcp��ͷ����ָ��,
+ ��Ϊipv6Ҳ�� build_args,
+ ������build_net_layer_tcp()ʱ�ж�build_tcp_args��NULL, ��ʹ��������, �����Ͳ�����!!
+ */
+ set_build_layer_tcp_args(thread_num, TH_PUSH | TH_ACK, MESA_rand_range(1000, 1460), 0);
+ }
+
+ raw_stream_pr = (struct streaminfo_private *)raw_stream;
/* ��ı���ijЩ�ص�������ԭʼ������ΪIP��ͷ, ���Բ���Ҫ�������ԭʼ��, ��Ϣ���洢��˽�����ṹ���� */
raw_pkt = update_raw_pkt(raw_stream_pr, snd_routedir, &snd_routedir_reverse);
if(NULL == raw_pkt){
@@ -2993,12 +2997,21 @@ int __sapp_inject_pkt(struct streaminfo *raw_stream, enum sapp_inject_opt sio,
if(raw_stream_pr->sid_append_list != NULL)
{
((raw_pkt_t *)raw_pkt)->append_list=raw_stream_pr->sid_append_list;
- }
- if(raw_stream_pr->sid_prepend_list != NULL)
- {
- ((raw_pkt_t *)raw_pkt)->prepend_list=raw_stream_pr->sid_prepend_list;
- }
- if (raw_stream_pr->stream_trace_id != 0)
+ }
+ if (sapp_global_val->config.packet_io.inject_pkt_prepend_segment_id > 0) // update sid_prepend_list, insert inject_pkt_prepend_segment_id to head
+ {
+ struct segment_id_list inject_sid = {
+ {(unsigned int)sapp_global_val->config.packet_io.inject_pkt_prepend_segment_id}, 1};
+ if (raw_stream_pr->sid_prepend_list != NULL)
+ {
+ for(unsigned int i=1; i < MIN(raw_stream_pr->sid_prepend_list->sz_sidlist, MAX_SID_NUM-1); i++)
+ {
+ inject_sid.sid_list[i] = raw_stream_pr->sid_prepend_list->sid_list[i];
+ }
+ }
+ ((raw_pkt_t *)raw_pkt)->prepend_list = &inject_sid;
+ }
+ if (raw_stream_pr->stream_trace_id != 0)
{
((raw_pkt_t *)raw_pkt)->stream_trace_id = raw_stream_pr->stream_trace_id;
}
@@ -3037,7 +3050,7 @@ int __sapp_inject_pkt(struct streaminfo *raw_stream, enum sapp_inject_opt sio,
if(payload_len + reserved_hdr_len > MTU_MAX){
sapp_global_val->mthread_volatile[thread_num]->sys_stat.count[SAPP_STAT_SND_ERROR]++;
sapp_runtime_log(RLOG_LV_INFO, "__sapp_inject_pkt() error! payload_len too long:%d.\n",
- payload_len + reserved_hdr_len);
+ payload_len + reserved_hdr_len);
return -1;
}
@@ -3070,7 +3083,7 @@ int __sapp_inject_pkt(struct streaminfo *raw_stream, enum sapp_inject_opt sio,
local_sys_stat->length[SAPP_STAT_SND_UDP]+= raw_pkt->raw_pkt_len;
}
}
-
+ ((raw_pkt_t *)raw_pkt)->prepend_list = raw_stream_pr->sid_prepend_list;// set back stream sid_prepend_list
err:
packet_io_free_sendbuf(SEND_TYPE_LINK_INJECT, thread_num);