summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2020-05-08 17:20:56 +0800
committerlijia <[email protected]>2020-05-08 17:20:56 +0800
commitf8435d81830d2aead9736f96a84b4586b7cef2df (patch)
treea8b98bd23369f82dcb158106c6a87cc33e1468b5
parent916572de28235e5abc53bbd7fbe44b781182ff4f (diff)
1.修复插件同时返回KILL_OTHER和DROPME, pme没有清空的BUG;v4.0.12
2.修复marsio模式下, 调用VXLAN相关选项没报错的BUG.
-rw-r--r--src/dealpkt/callapp.c7
-rw-r--r--src/dealpkt/plug_support.c177
2 files changed, 124 insertions, 60 deletions
diff --git a/src/dealpkt/callapp.c b/src/dealpkt/callapp.c
index ee9b24f..bff17fc 100644
--- a/src/dealpkt/callapp.c
+++ b/src/dealpkt/callapp.c
@@ -465,6 +465,7 @@ int stream_process(struct streaminfo *a_stream,const void *this_iphdr, const voi
/* ��ǰ���������DROPME, ��KILL_OTHER, ˵�����в�������� */
plug_entry_kick_out_tot_list(pFunList, a_stream);
pFunList = NULL;
+ *apme = NULL; /* 2020-05-08 lijia modify */
break;
}
}
@@ -560,10 +561,16 @@ int stream_process(struct streaminfo *a_stream,const void *this_iphdr, const voi
if(local_app_ret & APP_STATE_KILL_FOLLOW){
plug_entry_kick_out_tot_list(pNext, a_stream);
pPrev->next = NULL;
+ if(NULL == pPrev){
+ /* ��ǰ����ڵ�һ��, KILL_FOLLOW & APP_STATE_DROPME�൱��ȫ�����DROPME*/
+ pFunList = NULL; /* ȫ�����CLOSE */
+ *apme = NULL; /* 2020-05-08 lijia modify */
+ }
/* 2019-11-15 lijia add for plug kill other */
}else if(local_app_ret & APP_STATE_KILL_OTHER){
plug_entry_kick_out_tot_list(pFunList, a_stream);
pFunList = NULL; /* ȫ�����CLOSE */
+ *apme = NULL; /* 2020-05-08 lijia modify */
}
}
else
diff --git a/src/dealpkt/plug_support.c b/src/dealpkt/plug_support.c
index 6c42218..e366925 100644
--- a/src/dealpkt/plug_support.c
+++ b/src/dealpkt/plug_support.c
@@ -74,134 +74,191 @@ int get_opt_from_rawpkt(const void *voidpkt, int type, void *void_value)
#if IOMODE_MARSIO
case RAW_PKT_GET_GDEV_IP:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ int *out_value = (int *)void_value;
+ *out_value = mr_ctrlzone->g_device_in_addr;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_GDEV_IP' in no marsio mode!");
ret = -1;
- break;
}
- int *out_value = (int *)void_value;
- *out_value = mr_ctrlzone->g_device_in_addr;
}
break;
case RAW_PKT_GET_VXLAN_LOCAL_IP:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ int *out_value = (int *)void_value;
+ *out_value = mr_ctrlzone->l_device_in_addr;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_LOCAL_IP' in no marsio mode!");
ret = -1;
- break;
}
- int *out_value = (int *)void_value;
- *out_value = mr_ctrlzone->l_device_in_addr;
}
break;
case RAW_PKT_GET_VXLAN_ID:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ int *out_value = (int *)void_value;
+ *out_value = ntohl(mr_ctrlzone->g_device_linkpair);
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_ID' in no marsio mode!");
ret = -1;
- break;
- }
- int *out_value = (int *)void_value;
- *out_value = ntohl(mr_ctrlzone->g_device_linkpair);
+ }
}
break;
case RAW_PKT_GET_VXLAN_VPNID:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ int *out_value = (int *)void_value;
+ *out_value = ntohl(mr_ctrlzone->g_device_vpn_id);
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_VPNID' in no marsio mode!");
ret = -1;
- break;
- }
- int *out_value = (int *)void_value;
- *out_value = ntohl(mr_ctrlzone->g_device_vpn_id);
+ }
}
break;
case RAW_PKT_GET_VXLAN_SPORT:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ short *out_value = (short *)void_value;
+ *out_value = mr_ctrlzone->l4_src_port;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_SPORT' in no marsio mode!");
ret = -1;
- break;
- }
- short *out_value = (short *)void_value;
- *out_value = mr_ctrlzone->l4_src_port;
+ }
}
break;
case RAW_PKT_GET_VXLAN_ENCAP_TYPE:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ unsigned char *out_value = (unsigned char *)void_value;
+ *out_value = mr_ctrlzone->__encap_type;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_ENCAP_TYPE' in no marsio mode!");
ret = -1;
- break;
- }
- unsigned char *out_value = (unsigned char *)void_value;
- *out_value = mr_ctrlzone->__encap_type;
+ }
}
break;
case RAW_PKT_GET_VXLAN_LINK_DIR:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ unsigned char *out_value = (unsigned char *)void_value;
+ *out_value = mr_ctrlzone->route_dir;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_LINK_DIR' in no marsio mode!");
ret = -1;
- break;
- }
- unsigned char *out_value = (unsigned char *)void_value;
- *out_value = mr_ctrlzone->route_dir;
+ }
}
break;
case RAW_PKT_GET_VXLAN_OUTER_GDEV_MAC:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ memcpy(void_value, mr_ctrlzone->g_device_mac, 6);
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_OUTER_GDEV_MAC' in no marsio mode!");
ret = -1;
- break;
- }
- memcpy(void_value, mr_ctrlzone->g_device_mac, 6);
+ }
}
break;
case RAW_PKT_GET_VXLAN_OUTER_LOCAL_MAC:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ memcpy(void_value, mr_ctrlzone->l_device_mac, 6);
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VXLAN_OUTER_LOCAL_MAC' in no marsio mode!");
ret = -1;
- break;
- }
- memcpy(void_value, mr_ctrlzone->l_device_mac, 6);
+ }
}
break;
case RAW_PKT_GET_VIRTUAL_LINK_ID:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ unsigned long long *out_value = (unsigned long long *)void_value;
+ *out_value = mr_ctrlzone->virtual_link_id;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_VIRTUAL_LINK_ID' in no marsio mode!");
ret = -1;
- break;
}
- unsigned long long *out_value = (unsigned long long *)void_value;
- *out_value = mr_ctrlzone->virtual_link_id;
}
break;
+
case RAW_PKT_GET_REHASH_INDEX:
{
- const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)marsio_buff_ctrlzone((marsio_buff_t *)rawpkt->io_lib_pkt_reference, 0); /* index */
- if(0 == (mr_ctrlzone->action & TUNNAT_CZ_ACTION_FORWARD)){/* ��vxlan��, �϶�û����Щѡ�� */
+ if(CAP_MODEL_MARSIOV4 == g_packet_io_cap_mode){
+ const struct mr_tunnat_ctrlzone *mr_ctrlzone = (const struct mr_tunnat_ctrlzone *)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;
+ break;
+ }
+ unsigned long long *out_value = (unsigned long long *)void_value;
+ *out_value = mr_ctrlzone->rehash_index;
+ }else{
+ sapp_log(20, 0, 20, "can't support option 'RAW_PKT_GET_REHASH_INDEX' in no marsio mode!");
ret = -1;
- break;
}
- unsigned long long *out_value = (unsigned long long *)void_value;
- *out_value = mr_ctrlzone->rehash_index;
}
break;
#endif
+
default:
ret = -1;
break;