支持获取原始mac
This commit is contained in:
@@ -531,7 +531,7 @@ static int wrapped_kni_cmsg_set(struct kni_cmsg *cmsg, uint16_t type, const unsi
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, struct pkt_info *pktinfo, uint16_t *len){
|
||||
static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, struct streaminfo *stream, struct pkt_info *pktinfo, uint16_t *len){
|
||||
void *logger = g_kni_handle->local_logger;
|
||||
uint16_t bufflen = 0, serialize_len = 0;
|
||||
unsigned char *buff = NULL;
|
||||
@@ -596,7 +596,25 @@ static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, st
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_STREAM_TRACE_ID, (const unsigned char*)trace_id,
|
||||
strnlen(pmeinfo->stream_traceid, sizeof(pmeinfo->stream_traceid)), pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
|
||||
//src mac
|
||||
char src_mac[6];
|
||||
ret = get_rawpkt_opt_from_streaminfo(stream, RAW_PKT_GET_VXLAN_OUTER_GDEV_MAC, src_mac);
|
||||
if(ret < 0){
|
||||
KNI_LOG_ERROR(logger, "Failed at get src mac from rawpkt");
|
||||
goto error_out;
|
||||
}
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_SRC_MAC, (const unsigned char*)src_mac, sizeof(src_mac), pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
//dst mac
|
||||
char dst_mac[6];
|
||||
ret = get_rawpkt_opt_from_streaminfo(stream, RAW_PKT_GET_VXLAN_OUTER_LOCAL_MAC, dst_mac);
|
||||
if(ret < 0){
|
||||
KNI_LOG_ERROR(logger, "Failed at get dst mac from rawpkt");
|
||||
goto error_out;
|
||||
}
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_DST_MAC, (const unsigned char*)dst_mac, sizeof(dst_mac), pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
|
||||
bufflen = kni_cmsg_serialize_size_get(cmsg);
|
||||
buff = (unsigned char*)ALLOC(char, bufflen);
|
||||
serialize_len = 0;
|
||||
@@ -615,7 +633,7 @@ error_out:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char* add_cmsg_to_packet(struct pme_info *pmeinfo, struct pkt_info *pktinfo, int *len){
|
||||
static char* add_cmsg_to_packet(struct pme_info *pmeinfo, struct streaminfo *stream, struct pkt_info *pktinfo, int *len){
|
||||
//tcp option: kind 88, len 4, control_info_len
|
||||
char *new_pkt = (char*)ALLOC(struct wrapped_packet, 1);
|
||||
int offset = 0;
|
||||
@@ -645,7 +663,7 @@ static char* add_cmsg_to_packet(struct pme_info *pmeinfo, struct pkt_info *pktin
|
||||
offset += pktinfo->data_len;
|
||||
//kni_cmsg_serialize_header
|
||||
uint16_t header_len = 0;
|
||||
unsigned char* header = kni_cmsg_serialize_header_new(pmeinfo, pktinfo, &header_len);
|
||||
unsigned char* header = kni_cmsg_serialize_header_new(pmeinfo, stream, pktinfo, &header_len);
|
||||
memcpy(new_pkt + offset, (void*)header, header_len);
|
||||
offset += header_len;
|
||||
FREE(&header);
|
||||
@@ -1015,7 +1033,7 @@ static int first_data_intercept(struct streaminfo *stream, struct pme_info *pmei
|
||||
traceid2pme_htable_add(pmeinfo);
|
||||
//action = KNI_ACTION_INTERCEPT, sendto tfe
|
||||
int len = 0;
|
||||
char *buff = add_cmsg_to_packet(pmeinfo, pktinfo, &len);
|
||||
char *buff = add_cmsg_to_packet(pmeinfo, stream, pktinfo, &len);
|
||||
ret = send_to_tfe(buff, len, thread_seq, pmeinfo->tfe_id, pmeinfo->addr_type);
|
||||
if(ret < 0){
|
||||
KNI_LOG_DEBUG(logger, "Stream error: failed at send first packet to tfe%d, stream traceid = %s", pmeinfo->tfe_id, pmeinfo->stream_traceid);
|
||||
|
||||
Reference in New Issue
Block a user