summaryrefslogtreecommitdiff
path: root/src/access/flwd_access_idle_call.c
diff options
context:
space:
mode:
authorlijia <[email protected]>2018-10-24 09:36:45 +0800
committerlijia <[email protected]>2018-10-24 09:36:45 +0800
commit86a43b4d325ddc850fa9dc4711670880f35b11e8 (patch)
tree8356a056ac9bfb8cf14fcf57f113dd306b4277d1 /src/access/flwd_access_idle_call.c
create new project.
Diffstat (limited to 'src/access/flwd_access_idle_call.c')
-rw-r--r--src/access/flwd_access_idle_call.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/access/flwd_access_idle_call.c b/src/access/flwd_access_idle_call.c
new file mode 100644
index 0000000..a842728
--- /dev/null
+++ b/src/access/flwd_access_idle_call.c
@@ -0,0 +1,66 @@
+/*
+ �����������ݰ�, CPU����ʱ, �ڰ������̵߳��������е��ô˽ӿ�,
+ ������htable��ʱ��̭,
+ ��ԾIP���ø���(ԭ�����޲��Ե�, �û�������һ������, ����в��Ե���; ��֮, ԭ�������в���, ��ɾ����),
+
+ ��˺����ӿ��ڰ������̵߳���������, ��ʵ�ְ������߳���������ʱ������, �������!!
+*/
+#include "flowood.h"
+#include "flowood_fun.h"
+#include "flwd_net.h"
+#include "MESA_handle_logger.h"
+#include "MESA_atomic.h"
+#include <linux/if_ether.h>
+#include <linux/if_arp.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+#include <assert.h>
+
+extern MESA_ATOMIC_T flwd_temp_active_ip_op_flag[FLWD_MAX_THREAD_NUM];
+
+
+/* �ڰ������߳������Ĵ�����ԾIP�ĸ���, ����ģʽ */
+static int flwd_act_ip_update_in_process_thread_context(int tid)
+{
+#if FLWD_ASYNC_LOCK_FREE
+ int ret;
+ flwd_active_ip_t tmp_act_ip;
+ long buf_len;
+
+ if(0 == MESA_lqueue_get_count(flwd_temp_active_ip_to_deal[tid])){
+ /* û���µ����� */
+ return 0;
+ }
+
+ if(FLWD_ACT_IP_OP_OR_MASK_BY_CALLBACK & __sync_or_and_fetch(&flwd_temp_active_ip_op_flag[tid], FLWD_ACT_IP_OP_OR_MASK_BY_PROC)){
+ /* callback�̻߳��ڴ�����, �˴����ܵȴ�, ��ձ�־λ��, ֱ�ӷ��ص���һ�ε��� */
+ __sync_and_and_fetch(&flwd_temp_active_ip_op_flag[tid], FLWD_ACT_IP_OP_AND_MASK_BY_PROC);
+ return 0;
+ }
+
+ buf_len = sizeof(flwd_active_ip_t);
+ ret = MESA_lqueue_get_head(flwd_temp_active_ip_to_deal[tid], &tmp_act_ip, &buf_len);
+ assert(ret >= 0);
+
+ flwd_act_ip_hash_proc(tid, &tmp_act_ip);
+
+ /* �������, �����־λ */
+ __sync_and_and_fetch(&flwd_temp_active_ip_op_flag[tid], FLWD_ACT_IP_OP_AND_MASK_BY_PROC);
+
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+
+int flwd_idle_call(int tid)
+{
+ int ret;
+ ret = flwd_act_ip_update_in_process_thread_context(tid);
+
+ return ret;
+}
+