#include #include #include #include #include #include "mrl_main.h" #include "mrl_redis.h" #include "mrl_packet.h" #include "mrl_stat.h" struct mrl_global_instance mrl_instance; extern struct global_stat_t global_stat; void mrl_cfg_init(const char *profile) { char *temp_port_str; char *temp_ip_str; char *temp_link_id_str; char *temp_inner_mac_str; char **_link_id_str; char **_inner_mac_str; char **link_id_str; char **gdev_inner_mac_str; unsigned int split_num = 0; int temp_port = 0; unsigned int i=0; unsigned int j = 0; /********** load log info **********/ MESA_load_profile_int_def(profile, "LOG_INFO", "log_level", &(mrl_instance.mrl_cfg.mrl_log_level),RLOG_LV_DEBUG); MESA_load_profile_string_def(profile, "LOG_INFO", "log_path", mrl_instance.mrl_cfg.mrl_log_path, MRL_MAX_PATH, "./log/mrl.log"); /********** load detect info **********/ MESA_load_profile_string_def(profile, "DETECT_INFO", "dest_ip", mrl_instance.mrl_cfg.dest_ip, MRL_STR_IP_LEN, "0.0.0.0"); MESA_load_profile_int_def(profile, "DETECT_INFO", "dest_port",&(temp_port),8888); assert(temp_port > 0 && temp_port <= 65535); mrl_instance.mrl_cfg.dest_port = temp_port; MESA_load_profile_int_def(profile, "DETECT_INFO", "local_port",&(temp_port),8888); assert(temp_port > 0 && temp_port <= 65535); mrl_instance.mrl_cfg.local_port = temp_port; /********** load sock info **********/ MESA_load_profile_string_def(profile, "SOCK_INFO", "mgw_ip", mrl_instance.mrl_cfg.mgw_ip, MRL_STR_IP_LEN, "0.0.0.0"); MESA_load_profile_int_def(profile, "SOCK_INFO", "mgw_port",&(temp_port),8888); assert(temp_port > 0 && temp_port <= 65535); mrl_instance.mrl_cfg.mgw_port = temp_port; char mrl_netcard[MRL_STR_NETCARD_LEN]; memset(mrl_netcard,0,MRL_STR_NETCARD_LEN); MESA_load_profile_string_def(profile, "SOCK_INFO", "mrl_netcard", mrl_netcard, MRL_STR_NETCARD_LEN, "eth0"); printf("mrl netcard is %s\n",mrl_netcard); uint32_t temp_mrl_ip = mrl_get_ip_by_eth_name(mrl_netcard); if(temp_mrl_ip < 0) { MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_cfg_init","get ip from eth name error,eth name is %s",mrl_netcard); assert(0); } inet_ntop(AF_INET,(void *)&temp_mrl_ip, mrl_instance.mrl_cfg.mrl_ip,MRL_STR_IP_LEN); printf("mrl ip is %s\n",mrl_instance.mrl_cfg.mrl_ip); MESA_load_profile_int_def(profile, "SOCK_INFO", "mrl_port",&(temp_port),8888); assert(temp_port > 0 && temp_port <= 65535); mrl_instance.mrl_cfg.mrl_port = temp_port; /********** load maat info **********/ MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_table_path", mrl_instance.mrl_cfg.Maat_table_path, MRL_MAX_PATH, "./conf/table_info.conf"); MESA_load_profile_uint_def(profile, "MAAT_INFO", "Maat_max_threads", &(mrl_instance.mrl_cfg.Maat_max_threads), 1); MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_redis_ip", mrl_instance.mrl_cfg.Maat_redis_ip, MRL_STR_IP_LEN, "127.0.0.1"); MESA_load_profile_int_def(profile, "MAAT_INFO", "Maat_redis_port", &(temp_port), 6379); assert(temp_port > 0 && temp_port <= 65535); mrl_instance.mrl_cfg.Maat_redis_port = temp_port; MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_stat_path", mrl_instance.mrl_cfg.Maat_stat_path,MRL_MAX_PATH, "./log/Maat_stat.log"); MESA_load_profile_int_def(profile, "MAAT_INFO", "Maat_redis_index", &(mrl_instance.mrl_cfg.redis_index), 1); /********** load htable info *********/ MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_slot_size", &(mrl_instance.mrl_cfg.ht_slot_size), 1048576); MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_max_element_num", &(mrl_instance.mrl_cfg.ht_max_element_num), 0); MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_mutex_num", &(mrl_instance.mrl_cfg.ht_mutex_num), 1); /********** load gdev info **********/ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_mac", mrl_instance.mrl_cfg.vxlan_outer_local_mac, MRL_STR_MAC_LEN, "00:00:00:00:00:00"); MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_ip", mrl_instance.mrl_cfg.vxlan_outer_local_ip, MRL_STR_IP_LEN, "127.0.0.1"); MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_port", mrl_instance.mrl_cfg.xvlan_outer_local_port,MRL_STR_PORT_LEN, "8888"); MESA_load_profile_int_def(profile, "VXLAN_INFO", "vxlan_vpn_id", &(mrl_instance.mrl_cfg.vxlan_vpn_id), 112); MESA_load_profile_int_def(profile, "VXLAN_INFO", "vxlan_link_dir", &(mrl_instance.mrl_cfg.vxlan_link_dir), 0); MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_gdev_mac",mrl_instance.mrl_cfg.vxlan_outer_gdev_mac,MRL_STR_MAC_LEN, "00:00:00:00:00:00"); MESA_load_profile_uint_def(profile, "VXLAN_INFO", "vxlan_gdev_num", &(mrl_instance.mrl_cfg.vxlan_gdev_num), 1); int gdev_ip_len = mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_IP_LEN; temp_ip_str = (char *)calloc(gdev_ip_len,sizeof(char)); global_stat.malloc_memory += gdev_ip_len; MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_gdev_ip",temp_ip_str, gdev_ip_len, "0.0.0.0"); mrl_instance.mrl_cfg.vxlan_outer_gdev_ip = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *)); global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *); for(i=0;ipktstate){ case OP_STATE_PENDING: if(mrl_pkt_signature_identify(a_tcp)) { global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); ret = APP_STATE_GIVEME;//不指定faw和drop会采取哪个动作? } else { ret = APP_STATE_DROPME|APP_STATE_FAWPKT;//如果当前IP是推荐表中的IP,那么后续数据包不用给我,并且回流转发 } break; case OP_STATE_DATA: global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); ret = APP_STATE_GIVEME; break; case OP_STATE_CLOSE: if(raw_packet != NULL) { global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); } ret = APP_STATE_DROPME; break; default: ret = APP_STATE_DROPME | APP_STATE_FAWPKT; break; } return ret; } extern "C" char mrl_udp_entry(struct streaminfo *a_udp, void **pme, int thread_seq, void *raw_packet) { global_stat.recv_gdev_total_pkts ++; global_stat.recv_gdev_udp_pkts ++; char ret = APP_STATE_GIVEME; switch(a_udp->pktstate){ case OP_STATE_PENDING: if(mrl_pkt_signature_identify(a_udp)) { global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); ret = APP_STATE_GIVEME; } else { if(mrl_identify_nominee(a_udp)) { ret =APP_STATE_GIVEME; } else { ret =APP_STATE_DROPME|APP_STATE_FAWPKT; } } break; case OP_STATE_DATA: global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); ret = APP_STATE_GIVEME; break; case OP_STATE_CLOSE: if(raw_packet != NULL) { global_stat.recv_ir_pkts ++; mrl_send_to_mgw(raw_packet, thread_seq); } ret = APP_STATE_DROPME; break; default: ret = APP_STATE_DROPME | APP_STATE_FAWPKT; break; } return ret; }