diff options
| author | lijia <[email protected]> | 2020-05-08 17:20:56 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2020-05-08 17:20:56 +0800 |
| commit | f8435d81830d2aead9736f96a84b4586b7cef2df (patch) | |
| tree | a8b98bd23369f82dcb158106c6a87cc33e1468b5 | |
| parent | 916572de28235e5abc53bbd7fbe44b781182ff4f (diff) | |
1.修复插件同时返回KILL_OTHER和DROPME, pme没有清空的BUG;v4.0.12
2.修复marsio模式下, 调用VXLAN相关选项没报错的BUG.
| -rw-r--r-- | src/dealpkt/callapp.c | 7 | ||||
| -rw-r--r-- | src/dealpkt/plug_support.c | 177 |
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; |
