diff options
| author | yangwei <[email protected]> | 2023-08-15 13:44:18 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2023-08-15 13:46:04 +0800 |
| commit | 613c162cf985a03a6dd2c5bcdf6255f027073430 (patch) | |
| tree | f9b7a5d86deed2b79282fcfa0a2f0dc262eebffc /src/packet_io/sendpacket.c | |
| parent | cb19a43355d241e195781d7476acaf57a3aeb932 (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.c | 69 |
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); |
