diff options
| -rw-r--r-- | include/public/stream_inc/stream_rawpkt.h | 6 | ||||
| -rw-r--r-- | src/config/config_parse.cpp | 2 | ||||
| -rw-r--r-- | src/dealpkt/plug_support.c | 58 | ||||
| -rw-r--r-- | test/test_app_sapp.c | 22 |
4 files changed, 83 insertions, 5 deletions
diff --git a/include/public/stream_inc/stream_rawpkt.h b/include/public/stream_inc/stream_rawpkt.h index f0630e8..ebaf421 100644 --- a/include/public/stream_inc/stream_rawpkt.h +++ b/include/public/stream_inc/stream_rawpkt.h @@ -1,7 +1,7 @@ #ifndef _APP_STREAM_RAWPKT_H_
#define _APP_STREAM_RAWPKT_H_
-#define STREAM_RAWPKT_H_VERSION (20190817)
+#define STREAM_RAWPKT_H_VERSION (20201104)
#include "stream_base.h"
@@ -22,8 +22,10 @@ enum{ RAW_PKT_GET_VIRTUAL_LINK_ID, //value type is uint64 *, out_value should be uint64 *
RAW_PKT_GET_REHASH_INDEX, // value type is uint64 *, out_value should be uint64 *
RAW_PKT_GET_VXLAN_VPNID, // network-order, VPN_ID, value type is int, out_value should be int *
-
RAW_PKT_GET_VXLAN_LOCAL_IP, // network-order, VXLAN Local IP, value type is int, out_value should be int *
+
+ RAW_PKT_GET_ORIGINAL_LOWEST_ETH_SMAC, /* value type is char[6],��ʵԭʼ��������smac��ַ,mirrorģʽ��, ��ͬ��RAW_PKT_GET_DATA, ����ʹ��stream->pfather����ƫ��; inline + vxlan + mrtunnatģʽ��, ��ͬ��RAW_PKT_GET_VXLAN_OUTER_GDEV_MAC; */
+ RAW_PKT_GET_ORIGINAL_LOWEST_ETH_DMAC, /* value type is char[6],��ʵԭʼ��������dmac��ַ,mirrorģʽ��, ��ͬ��RAW_PKT_GET_DATA, ����ʹ��stream->pfather����ƫ��; inline + vxlan + mrtunnatģʽ��, ��ͬ��RAW_PKT_GET_VXLAN_OUTER_LOCAL_MAC; */
};
#ifdef __cplusplus
diff --git a/src/config/config_parse.cpp b/src/config/config_parse.cpp index fbfda2d..183cc75 100644 --- a/src/config/config_parse.cpp +++ b/src/config/config_parse.cpp @@ -1100,7 +1100,7 @@ int sapp_parse_config(void) tomlc99_wrap_load_string_def(default_config_file, (char *)"overlay_tunnel_definition", (char *)"prune_inject_layer_cfg_file", pconfig->packet_io.packet_io_tunnel.prune_inject_layer_cfg_file, PATH_MAX, "etc/prune_inject_layer.conf"); tomlc99_wrap_load_string_def(default_config_file, (char *)"overlay_tunnel_definition", (char *)"stream_compare_layer_cfg_file", pconfig->packet_io.packet_io_tunnel.stream_compare_layer_cfg_file, PATH_MAX, "etc/stream_compare_layer.conf"); - tomlc99_wrap_load_string_def(default_config_file, (char *)"overlay_tunnel_definition", (char *)"overlay_mode", pconfig->packet_io.packet_io_tunnel.overlay_mode_string, NAME_MAX, "_no_default_"); + tomlc99_wrap_load_string_def(default_config_file, (char *)"overlay_tunnel_definition", (char *)"overlay_mode", pconfig->packet_io.packet_io_tunnel.overlay_mode_string, NAME_MAX, "none"); /******************************* packet_io.feature ******************************/ tomlc99_wrap_load_string_def(default_config_file, (char *)"packet_io.feature", (char *)"BSD_packet_filter", str_tmp, NAME_MAX, ""); diff --git a/src/dealpkt/plug_support.c b/src/dealpkt/plug_support.c index 4d1d821..a008c5e 100644 --- a/src/dealpkt/plug_support.c +++ b/src/dealpkt/plug_support.c @@ -262,6 +262,64 @@ int get_opt_from_rawpkt(const void *voidpkt, int type, void *void_value) break; #endif + /* ���ڲ����ȡ��ײ���ʵmac��ַ, ����ʲôģʽ, ��û��mrtunnat, ������һ���ӿ� */ + case RAW_PKT_GET_ORIGINAL_LOWEST_ETH_SMAC: + { + const struct mesa_ethernet_hdr *lowest_ehdr; + + if(0 == sapp_global_val->config.packet_io.packet_io_tunnel.l2_l3_tunnel_support){ //with mrtunnat + if(DEPOLYMENT_MODE_INLINE == sapp_global_val->config.packet_io.depolyment_mode_bin){ + if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){ + const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)ptr_marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */ + if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */ + ret = -1; + }else{ + memcpy(void_value, mr_ctrlzone->g_device_mac, ETH_ALEN); + } + }else{ + sapp_runtime_log(RLOG_LV_FATAL, "can't support option 'RAW_PKT_GET_ORIGINAL_LOWEST_ETH_SMAC' in no marsio inline mode!"); + ret = -1; + } + }else{ + lowest_ehdr = (struct mesa_ethernet_hdr *)rawpkt->raw_pkt_data; + memcpy(void_value, lowest_ehdr->ether_shost, ETH_ALEN); + } + }else{ //from v4.2, without mrtunnat + lowest_ehdr = (struct mesa_ethernet_hdr *)rawpkt->raw_pkt_data; + memcpy(void_value, lowest_ehdr->ether_shost, ETH_ALEN); + } + } + break; + + /* ���ڲ����ȡ��ײ���ʵmac��ַ, ����ʲôģʽ, ��û��mrtunnat, ������һ���ӿ� */ + case RAW_PKT_GET_ORIGINAL_LOWEST_ETH_DMAC: + { + const struct mesa_ethernet_hdr *lowest_ehdr; + + if(0 == sapp_global_val->config.packet_io.packet_io_tunnel.l2_l3_tunnel_support){ //with mrtunnat + if(DEPOLYMENT_MODE_INLINE == sapp_global_val->config.packet_io.depolyment_mode_bin){ + if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){ + const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)ptr_marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */ + if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */ + ret = -1; + }else{ + memcpy(void_value, mr_ctrlzone->l_device_mac, ETH_ALEN); + } + }else{ + sapp_runtime_log(RLOG_LV_FATAL, "can't support option 'RAW_PKT_GET_ORIGINAL_LOWEST_ETH_SMAC' in no marsio inline mode!"); + ret = -1; + } + }else{ + lowest_ehdr = (struct mesa_ethernet_hdr *)rawpkt->raw_pkt_data; + memcpy(void_value, lowest_ehdr->ether_dhost, ETH_ALEN); + } + }else{ //from v4.2, without mrtunnat + lowest_ehdr = (struct mesa_ethernet_hdr *)rawpkt->raw_pkt_data; + memcpy(void_value, lowest_ehdr->ether_dhost, ETH_ALEN); + } + } + break; + default: ret = -1; break; diff --git a/test/test_app_sapp.c b/test/test_app_sapp.c index 455bd6c..46a6bb7 100644 --- a/test/test_app_sapp.c +++ b/test/test_app_sapp.c @@ -2496,6 +2496,10 @@ char test_get_rawpkt_opt_from_streaminfo(struct streaminfo *f_stream,unsigned ch int tot_len = -1, this_layer_remain_len = -1; int ret; + if((OP_STATE_DATA != f_stream->opstate) && (OP_STATE_DATA != f_stream->pktstate)){ /* ��ͬʱ���ص�tcp,tcpall */ + return APP_STATE_GIVEME; + } + ret = get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_DATA, &raw_pkt_hdr); if(ret == 1){ raw_ipfrag_list_t *tlist = (raw_ipfrag_list_t *)raw_pkt_hdr; @@ -2515,7 +2519,7 @@ char test_get_rawpkt_opt_from_streaminfo(struct streaminfo *f_stream,unsigned ch get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_GDEV_IP, &gdev_ip); inet_ntop(AF_INET, &gdev_ip, gdev_ip_str, 32); - int link_id; + int link_id = 0; get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_VXLAN_ID, &link_id); unsigned short vxlan_sport = 0; @@ -2524,7 +2528,11 @@ char test_get_rawpkt_opt_from_streaminfo(struct streaminfo *f_stream,unsigned ch unsigned char link_dir = 0; get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_VXLAN_LINK_DIR, &link_dir); - char gdev_mac[6], local_mac[6]; + unsigned char gdev_mac[6], local_mac[6]; + + memset(gdev_mac, 0, 6); + memset(local_mac, 0, 6); + get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_VXLAN_OUTER_GDEV_MAC, gdev_mac); get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_VXLAN_OUTER_LOCAL_MAC, local_mac); @@ -2533,6 +2541,16 @@ char test_get_rawpkt_opt_from_streaminfo(struct streaminfo *f_stream,unsigned ch gdev_mac[0], gdev_mac[1], gdev_mac[2], gdev_mac[3], gdev_mac[4], gdev_mac[5], local_mac[0], local_mac[1], local_mac[2], local_mac[3], local_mac[4], local_mac[5]); + memset(gdev_mac, 0, 6); + memset(local_mac, 0, 6); + + get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_ORIGINAL_LOWEST_ETH_SMAC, gdev_mac); + get_rawpkt_opt_from_streaminfo(f_stream, RAW_PKT_GET_ORIGINAL_LOWEST_ETH_DMAC, local_mac); + printf("get vxlan opt from RAW_PKT_GET_ORIGINAL_LOWEST_ETH_, smac:%02x-%02x-%02x-%02x-%02x-%02x, dmac:%02x-%02x-%02x-%02x-%02x-%02x \n", + gdev_mac[0], gdev_mac[1], gdev_mac[2], gdev_mac[3], gdev_mac[4], gdev_mac[5], + local_mac[0], local_mac[1], local_mac[2], local_mac[3], local_mac[4], local_mac[5]); + + printf("\n-----------------------\n"); return APP_STATE_GIVEME; } |
