summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2023-12-14 02:09:59 +0000
committersongyanchao <[email protected]>2023-12-14 02:09:59 +0000
commitd9482ed88d2374b097b35fbd3451a28aefa73eed (patch)
treefec0087d4fec6d0febe93dbb9b15cedfce6c94c1 /tools
parent052fc5bb8d6765ac20c2f8ce5dda97750d929dcd (diff)
🎈 perf(DPISDN-30): Packaging python scripts with nuitka.
Packaging python scripts with nuitka.
Diffstat (limited to 'tools')
-rw-r--r--tools/CMakeLists.txt5
-rw-r--r--tools/classifier_rule_test/CMakeLists.txt9
-rw-r--r--tools/classifier_rule_test/classifier_rule_test.c375
-rw-r--r--tools/dlogreader/CMakeLists.txt2
-rwxr-xr-xtools/dlogreader/dlogreader.py164
-rw-r--r--tools/lb_rule_test/CMakeLists.txt9
-rw-r--r--tools/lb_rule_test/lb_rule_test.c541
-rw-r--r--tools/monit_device/CMakeLists.txt13
-rwxr-xr-xtools/monit_device/monit_device.py4
-rw-r--r--tools/monit_obp/CMakeLists.txt13
-rw-r--r--tools/monit_obp/monit_obp.py4
-rw-r--r--tools/monit_stream/CMakeLists.txt13
-rwxr-xr-xtools/monit_stream/monit_stream.py7
-rw-r--r--tools/mrctl/CMakeLists.txt9
-rw-r--r--tools/mrctl/mrctl.c2099
-rw-r--r--tools/pagstat/CMakeLists.txt2
-rwxr-xr-xtools/pagstat/pagstat.py205
-rw-r--r--tools/script/mrstart78
-rw-r--r--tools/script/mrstop35
-rw-r--r--tools/script/mrzcpd287
-rw-r--r--tools/tcpdump/CMakeLists.txt5
21 files changed, 37 insertions, 3842 deletions
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 7140a0c..965d68d 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -2,11 +2,6 @@
add_subdirectory(monit_device)
add_subdirectory(monit_stream)
add_subdirectory(monit_obp)
-add_subdirectory(pagstat)
-add_subdirectory(dlogreader)
add_subdirectory(devbind)
add_subdirectory(systemd)
-add_subdirectory(mrctl)
-add_subdirectory(classifier_rule_test)
-add_subdirectory(lb_rule_test)
add_subdirectory(mrmarch)
diff --git a/tools/classifier_rule_test/CMakeLists.txt b/tools/classifier_rule_test/CMakeLists.txt
deleted file mode 100644
index 5485a81..0000000
--- a/tools/classifier_rule_test/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-find_package(DPDK REQUIRED)
-find_package(SYSTEMD REQUIRED)
-
-include_directories(${CMAKE_SOURCE_DIR}/service/include)
-include_directories(${DPDK_INCLUDE_DIR})
-
-add_executable(classifier_rule_test classifier_rule_test.c)
-target_link_libraries(classifier_rule_test MESA_prof_load_static infra m MESA_htable_static ${SYSTEMD_LIBRARIES})
-#install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/classifier_rule_test DESTINATION bin COMPONENT Program) \ No newline at end of file
diff --git a/tools/classifier_rule_test/classifier_rule_test.c b/tools/classifier_rule_test/classifier_rule_test.c
deleted file mode 100644
index d61f88f..0000000
--- a/tools/classifier_rule_test/classifier_rule_test.c
+++ /dev/null
@@ -1,375 +0,0 @@
-#include <MESA_prof_load.h>
-#include <arpa/inet.h>
-#include <cJSON.h>
-#include <ctrlmsg.h>
-#include <ctrlmsg_define.h>
-#include <getopt.h>
-#include <netinet/in.h>
-#include <rpc.h>
-#include <rte_flow.h>
-#include <rte_version.h>
-#include <sc_flow.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <unistd.h>
-
-#define GLOBAL_CONF_FILE_PATH "/opt/tsg/mrzcpd/etc/mrglobal.conf"
-#define MR_CLI_ARG_LIST "hcsdg:iep:"
-#define MR_CLI_RESPONSE_DISABLE 0
-#define MR_CLI_RESPONSE_ENABLE 1
-#define MR_CLI_CLOSE_DELAY 100
-
-#ifndef MR_CLASSIFIER_RPC_RESULT
-#define MR_CLASSIFIER_RPC_RESULT "Result"
-#endif
-
-enum mr_cli_arg
-{
- MR_CLI_REPEATED = 1000,
- MR_CLI_IP_VERSION_ANY,
- MR_CLI_FULL_UPDATE,
-};
-/* Instance */
-struct rpc_instance
-{
- volatile unsigned response_flag;
- struct rpc_client_handler * handler;
-};
-
-/* The Global ariable */
-struct rpc_instance * rpc_instance = NULL;
-
-/* Command Line Options */
-static struct option cli_options[] = {
- {"help", no_argument, NULL, 'h'},
- {"repeated", no_argument, NULL, MR_CLI_REPEATED},
- {"ip_version_any", required_argument, NULL, MR_CLI_IP_VERSION_ANY},
- {"full_update", required_argument, NULL, MR_CLI_FULL_UPDATE},
-};
-
-/* Rpc Create */
-struct rpc_instance * rpc_create()
-{
- struct rpc_instance * instance;
- instance = malloc(sizeof(struct rpc_instance));
- memset(instance, 0, sizeof(struct rpc_instance));
-
- instance->handler = rpc_client_alloc_handler(RPC_CLIENT_MODE_ASYNC);
- if (instance->handler == NULL)
- {
- printf("Alloc client handler failed\n");
- return NULL;
- }
-
- instance->response_flag = MR_CLI_RESPONSE_DISABLE;
-
- return instance;
-}
-
-void help()
-{
- printf("--repeated eg: --repeated }\n");
- printf("--ip_version_any + (rule num) eg: --ip_version_any 10 }\n");
- printf("--full_update + (rule num) eg: --full_update 1024 }\n");
-}
-
-/* Rpc Init */
-static int rpc_init(struct rpc_instance * instance)
-{
- char str_rpc_addr[MR_STRING_MAX] = {0};
- unsigned int rpc_port = 0;
-
- /* Get Ip & Port */
- MESA_load_profile_string_def(GLOBAL_CONF_FILE_PATH, "rpc", "addr", str_rpc_addr, sizeof(str_rpc_addr),
- CTRLMSG_DEFAULT_ADDR);
- MESA_load_profile_uint_def(GLOBAL_CONF_FILE_PATH, "rpc", "port", &rpc_port, CTRLMSG_DEFAULT_PORT);
-
- /* Change Ip Addr */
- struct sockaddr_in sockaddr_in;
- if (inet_pton(AF_INET, str_rpc_addr, &sockaddr_in.sin_addr) <= 0)
- {
- return RT_ERR;
- }
-
- /* Set Port */
- sockaddr_in.sin_port = htons(rpc_port);
- sockaddr_in.sin_family = AF_INET;
-
- /* Creat Msg Handler */
- if (rpc_client_connect(instance->handler, sockaddr_in) != 0)
- {
- printf("Client Connect Server Failed !!!\n");
- return RT_ERR;
- }
- return RT_SUCCESS;
-}
-
-void send_classifier_rule_msg_repate(struct rpc_instance * instance)
-{
- char str_src_addr[MR_STRING_MAX] = {0};
- char str_dst_addr[MR_STRING_MAX] = {0};
- cJSON * cjson_rule_array = cJSON_CreateArray();
- cJSON * cjson_rule = cJSON_CreateObject();
-
- for (int rule_id = 1; rule_id <= 2; rule_id++)
- {
- sprintf(str_src_addr, "%s", "172.2.60.2");
- sprintf(str_dst_addr, "%s", "172.2.60.2");
- cJSON * cjson_rule_item = cJSON_CreateObject();
- cJSON_AddNumberToObject(cjson_rule_item, "RuleId", 1);
- cJSON_AddStringToObject(cjson_rule_item, "SrcIpV4", str_src_addr);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcIpMaskV4", 24);
- cJSON_AddStringToObject(cjson_rule_item, "DstIpV4", str_dst_addr);
- cJSON_AddNumberToObject(cjson_rule_item, "DstIpMaskV4", 24);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortHigh", 65535);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortHigh", 65535);
- cJSON_AddNumberToObject(cjson_rule_item, "Proto", IPPROTO_TCP);
- cJSON_AddNumberToObject(cjson_rule_item, "Priority", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "SiId", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "Action", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "NextGroup", 0);
- cJSON_AddItemToArray(cjson_rule_array, cjson_rule_item);
- }
- cJSON_AddItemToObject(cjson_rule, "RuleArray", cjson_rule_array);
-
- char * cjson_str = cJSON_Print(cjson_rule);
- printf("cjson_rule: \n%s\n", cjson_str);
- free(cjson_str);
-
- if (rpc_client_send_request_async(instance->handler, PKT_CLASSIFIER_RULE_FULL_UPDATE, cjson_rule) != 0)
- {
- printf("Send Repate Rule Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- cJSON_Delete(cjson_rule);
-}
-
-void send_classifier_rule_msg_ip_version_any(struct rpc_instance * instance, int rule_num)
-{
- cJSON * cjson_rule_array = cJSON_CreateArray();
- cJSON * cjson_rule = cJSON_CreateObject();
-
- for (int rule_id = 1; rule_id <= rule_num; rule_id++)
- {
- cJSON * cjson_rule_item = cJSON_CreateObject();
- cJSON_AddNumberToObject(cjson_rule_item, "RuleId", rule_id);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortHigh", 65530);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortHigh", 64511 + rule_id);
- cJSON_AddNumberToObject(cjson_rule_item, "Proto", IPPROTO_TCP);
- cJSON_AddNumberToObject(cjson_rule_item, "Priority", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "SiId", rule_id % 2);
- cJSON_AddNumberToObject(cjson_rule_item, "Action", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "NextGroup", rule_id % 2);
- cJSON_AddItemToArray(cjson_rule_array, cjson_rule_item);
- }
- cJSON_AddItemToObject(cjson_rule, "RuleArray", cjson_rule_array);
-
- char * cjson_str = cJSON_Print(cjson_rule);
- printf("cjson_rule: \n%s\n", cjson_str);
- free(cjson_str);
-
- if (rpc_client_send_request_async(instance->handler, PKT_CLASSIFIER_RULE_FULL_UPDATE, cjson_rule) != 0)
- {
- printf("Send Ip Version Any Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- cJSON_Delete(cjson_rule);
-}
-
-void send_classifier_rule_full_update_msg(struct rpc_instance * instance, int rule_num)
-{
- char str_src_addr[MR_STRING_MAX] = {0};
- char str_dst_addr[MR_STRING_MAX] = {0};
- cJSON * cjson_rule_array = cJSON_CreateArray();
- cJSON * cjson_rule = cJSON_CreateObject();
-
- for (int rule_id = 1; rule_id <= rule_num; rule_id++)
- {
- if (rule_id < 2048)
- {
- sprintf(str_src_addr, "%s", "172.2.60.2");
- sprintf(str_dst_addr, "%s", "172.2.60.2");
- }
- else
- {
- sprintf(str_src_addr, "%s", "192.168.102.1");
- sprintf(str_dst_addr, "%s", "192.168.102.1");
- }
-
- cJSON * cjson_rule_item = cJSON_CreateObject();
- cJSON_AddNumberToObject(cjson_rule_item, "RuleId", rule_id);
- cJSON_AddStringToObject(cjson_rule_item, "SrcIpV4", str_src_addr);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcIpMaskV4", 24);
- cJSON_AddStringToObject(cjson_rule_item, "DstIpV4", str_dst_addr);
- cJSON_AddNumberToObject(cjson_rule_item, "DstIpMaskV4", 24);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "SrcPortHigh", 65530);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortLow", 0);
- cJSON_AddNumberToObject(cjson_rule_item, "DstPortHigh", 64511 + rule_id);
- cJSON_AddNumberToObject(cjson_rule_item, "Proto", IPPROTO_TCP);
- cJSON_AddNumberToObject(cjson_rule_item, "Priority", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "SiId", rule_id % 2);
- cJSON_AddNumberToObject(cjson_rule_item, "Action", 1);
- cJSON_AddNumberToObject(cjson_rule_item, "NextGroup", 0);
- cJSON_AddItemToArray(cjson_rule_array, cjson_rule_item);
- }
- cJSON_AddItemToObject(cjson_rule, "RuleArray", cjson_rule_array);
-
- char * cjson_str = cJSON_Print(cjson_rule);
- printf("cjson_rule: \n%s\n", cjson_str);
- free(cjson_str);
-
- if (rpc_client_send_request_async(instance->handler, PKT_CLASSIFIER_RULE_FULL_UPDATE, cjson_rule) != 0)
- {
- printf("Send Full Update Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- cJSON_Delete(cjson_rule);
-}
-
-/* Rule Full Update Response */
-static int __rule_full_update_response_handler(cJSON * rsp, void * arg)
-{
- struct rpc_instance * rpc_instance = (struct rpc_instance *)arg;
-
- cJSON * j_result = cJSON_GetObjectItem(rsp, MR_CLASSIFIER_RPC_RESULT);
- cJSON * j_rule_id = cJSON_GetObjectItem(rsp, "ErrRuleId");
- cJSON * j_err_reason = cJSON_GetObjectItem(rsp, "ErrReason");
-
- if (j_result == NULL)
- {
- printf("The Result Is Null !\n");
- }
- else
- {
- if ((u_int32_t)j_result->valuedouble == RT_SUCCESS)
- {
- printf("The Classifier Rule Full Update Success.\n");
- }
- else
- {
- printf("Classifier Rule Full Update Error.\n");
- printf(" Rule Id : '%u'\n", (u_int32_t)j_rule_id->valuedouble);
- printf(" Error Code : '%u'\n", (u_int32_t)j_result->valuedouble);
- printf(" Error Reason: '%s'\n", j_err_reason->valuestring);
- }
- }
-
- /* Set Creat Response Enable */
- __atomic_exchange_n(&rpc_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-int main(int argc, char * argv[])
-{
- int opt = 0, type = 0;
- uint32_t deal_num = 1024;
- char * endptr = NULL;
-
- while ((opt = getopt_long(argc, argv, MR_CLI_ARG_LIST, cli_options, NULL)) != -1)
- {
- switch (opt)
- {
- case MR_CLI_REPEATED: {
- type = MR_CLI_REPEATED;
- break;
- }
- case MR_CLI_IP_VERSION_ANY: {
- type = MR_CLI_IP_VERSION_ANY;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_FULL_UPDATE: {
- type = MR_CLI_FULL_UPDATE;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
-
- default:
- help();
- return 0;
- break;
- }
- }
-
- /* Create instance */
- rpc_instance = rpc_create();
- if (rpc_instance == NULL)
- {
- fprintf(stderr, "Classifier Rult Test instance create failed. ");
- return 0;
- }
-
- if (rpc_client_recv_response_register(rpc_instance->handler, PKT_CLASSIFIER_RULE_FULL_UPDATE,
- __rule_full_update_response_handler, rpc_instance) != 0)
- {
- printf("Register Full Update Response Callback Failed !!!\n");
- return 0;
- }
-
- if (rpc_init(rpc_instance) != RT_SUCCESS)
- {
- fprintf(stderr, "Rpc module initialization failed. ");
- return 0;
- }
-
- if (rpc_client_dispatch_thread(rpc_instance->handler) != 0)
- {
- printf("Client Start Dispach Thread Failed !!!\n");
- return 0;
- }
-
- /* Send Delete Requeset Msg */
- if (type == MR_CLI_REPEATED)
- {
- send_classifier_rule_msg_repate(rpc_instance);
- printf("Send Repate Rule.\n");
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- else if (type == MR_CLI_IP_VERSION_ANY)
- {
-
- send_classifier_rule_msg_ip_version_any(rpc_instance, deal_num);
- printf("Send Ip Version Any.\n");
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- else if (type == MR_CLI_FULL_UPDATE)
- {
- send_classifier_rule_full_update_msg(rpc_instance, deal_num);
- printf("Send Full Update,Total Rule Num Is:%d\n", deal_num);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- else
- {
- help();
- }
-
- return RT_SUCCESS;
-}
diff --git a/tools/dlogreader/CMakeLists.txt b/tools/dlogreader/CMakeLists.txt
deleted file mode 100644
index 63c2f94..0000000
--- a/tools/dlogreader/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-configure_file(dlogreader.py dlogreader)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/dlogreader DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/dlogreader/dlogreader.py b/tools/dlogreader/dlogreader.py
deleted file mode 100755
index 6bf217d..0000000
--- a/tools/dlogreader/dlogreader.py
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env python2
-
-import argparse
-import json
-import prettytable
-import time
-import sys
-import signal
-import os
-
-TBPS = (1 * 1000 * 1000 * 1000 * 1000)
-GBPS = (1 * 1000 * 1000 * 1000)
-MBPS = (1 * 1000 * 1000)
-KBPS = (1 * 1000)
-
-G_JSON_PATH = '/var/run/mrzcpd/mrmonit.daemon'
-G_APP_JSON_PATH = '/var/run/mrzcpd/mrmonit.app.%s'
-
-TITLE_VECTOR = ['PhyRXFrame','PhyRXBits','PhyRXMissed','PhyRXError',
- 'PhyRXNoBUF','PhyTXFrame','PhyTXBits','PhyTXError',
- 'UsrRXDrops', 'UsrTXDrops']
-
-TITLE_MAP = { 'PhyRXFrame' : 'ipackets',
- 'PhyRXBits' : 'ibytes',
- 'PhyRXMissed' : 'imissed',
- 'PhyRXError' : 'ierrors',
- 'PhyRXNoBUF' : 'rxnombuf',
- 'PhyTXFrame' : 'opackets',
- 'PhyTXBits' : 'obytes',
- 'PhyTXError' : 'oerrors',
- 'UsrRXDrops' : 'userrxdrop',
- 'UsrTXDrops' : 'usertxdrop'
- }
-
-def locate_vector_by_symbol(vector, symbol):
- return [s for s in vector if s['symbol'] == symbol]
-
-def list_all_phydev(json_fp):
- return [ s['symbol'] for s in json_fp['device']]
-
-def phydev_value_read(json_fp, str_device, str_item):
- phydevs = locate_vector_by_symbol(json_fp['device'], str_device)
- return phydevs[0]['stats']['accumulative'][str_item]
-
-def phydev_speed_read(json_fp, str_device, str_item):
- phydevs = locate_vector_by_symbol(json_fp['device'], str_device)
- return phydevs[0]['stats']['speed'][str_item]
-
-def app_stat_read(json_fp, item):
- return json_fp["appstat"][item]
-
-def app_json_load(appsym):
- with open(G_APP_JSON_PATH % appsym) as json_fp:
- return json.load(json_fp)
-
-def trans_to_human_readable(value):
- if value > TBPS:
- return value * 1.0 / TBPS, 'T'
- if value > GBPS:
- return value * 1.0 / GBPS, 'G'
- if value > MBPS:
- return value * 1.0 / MBPS, 'M'
- if value > KBPS:
- return value * 1.0 / KBPS, 'K'
-
- return value * 1.0, ' '
-
-def dump_physical_devices(json_fp, phydev_user_list):
- print("------------------------------------------------------------------------------------------------------------------------");
- print(" Network Ports Statistics ");
- print("------------------------------------------------------------------------------------------------------------------------");
-
- for devsym in phydev_user_list:
- print("Port %s" % devsym)
- print("RX: packets%20lu | bytes:%20lu | dropped: %10lu | fps:%s | bps: %s" % \
- (phydev_value_read(json_fp, devsym, 'ipackets'),
- phydev_value_read(json_fp, devsym, 'ibytes'),
- phydev_value_read(json_fp, devsym, 'imissed'),
- "%7.2f%c" % trans_to_human_readable(phydev_speed_read(json_fp, devsym, 'ipackets')),
- "%7.2f%c" % trans_to_human_readable(phydev_speed_read(json_fp, devsym, 'ibytes'))))
-
- print("TX: packets%20lu | bytes:%20lu | dropped: %10lu | fps:%s | bps: %s" %
- (phydev_value_read(json_fp, devsym, 'opackets'),
- phydev_value_read(json_fp, devsym, 'obytes'),
- phydev_value_read(json_fp, devsym, 'usertxdrop'),
- "%7.2f%c" % trans_to_human_readable(phydev_speed_read(json_fp, devsym, 'opackets')),
- "%7.2f%c" % trans_to_human_readable(phydev_speed_read(json_fp, devsym, 'obytes'))))
-
- return
-
-def dump_app_status(json_fp):
-
- print("------------------------------------------------------------------------------------------------------------------------")
- print(" Worker(Client Process) Statistics ")
- print("------------------------------------------------------------------------------------------------------------------------")
-
- nr_thread = len(app_stat_read(json_fp, 'packet_recv_count'))
- for thread_id in range(nr_thread):
- print("WORKER %2d | packets %20lu | bytes: %20lu | dropped: %12lu | runtime %7.2f" % \
- (thread_id, app_stat_read(json_fp, 'packet_recv_count')[thread_id],
- app_stat_read(json_fp, 'packet_recv_length')[thread_id],
- app_stat_read(json_fp, 'packet_recv_drop')[thread_id] +
- app_stat_read(json_fp, 'packet_send_drop')[thread_id], 0))
- return
-
-def dump_tail():
- print("------------------------------------------------------------------------------------------------------------------------");
-
-def setup_argv_parser(phydev_list):
-
- parser = argparse.ArgumentParser(description='Marsio ZeroCopy Tools -- DLOGREADER',
- version = 'Marsio ZeroCopy Tools Suite 4.1')
-
- parser.add_argument('-t', '--time', help = 'interval, seconds to wait between updates',
- type=int, default = 1)
- parser.add_argument('-l', '--loop', help = 'print loop, exit when recv a signal',
- action='store_true', default = 0)
- parser.add_argument('--clear-screen', help = 'clear screen at start of loop',
- action='store_true', default = 1)
- parser.add_argument('-a', '--app', help = 'application symbol', type=str, default = 'sapp')
- return parser.parse_args()
-
-def phydev_json_load():
- with open(G_JSON_PATH) as json_fp:
- return json.load(json_fp)
-
-def sigint_handler(handler, frame):
- sys.exit(0)
-
-def main():
- signal.signal(signal.SIGINT, sigint_handler)
-
- try:
- json_fp = phydev_json_load()
- phydev_list = list_all_phydev(json_fp)
- r_option = setup_argv_parser(phydev_list)
-
- while True:
- if r_option.clear_screen:
- os.system('clear')
-
- json_fp = phydev_json_load()
- dump_physical_devices(json_fp, phydev_list)
-
- app_json_fp = app_json_load(r_option.app)
- dump_app_status(app_json_fp)
- dump_tail()
-
- if not r_option.loop:
- break
-
- time.sleep(r_option.time)
-
- except KeyboardInterrupt:
- pass
- except ValueError as err:
- print(("%s, perhaps mrzcpd program is not running.") % str(err))
- except IOError as err:
- print(("%s, perhaps mrzcpd program is not running.") % str(err))
-
- return 0
-
-if __name__ == '__main__':
- main()
diff --git a/tools/lb_rule_test/CMakeLists.txt b/tools/lb_rule_test/CMakeLists.txt
deleted file mode 100644
index fa24fe5..0000000
--- a/tools/lb_rule_test/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-find_package(DPDK REQUIRED)
-find_package(SYSTEMD REQUIRED)
-
-include_directories(${CMAKE_SOURCE_DIR}/service/include)
-include_directories(${DPDK_INCLUDE_DIR})
-
-add_executable(lb_rule_test lb_rule_test.c)
-target_link_libraries(lb_rule_test MESA_prof_load_static infra m MESA_htable_static ${SYSTEMD_LIBRARIES})
-#install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lb_rule_test DESTINATION bin COMPONENT Program) \ No newline at end of file
diff --git a/tools/lb_rule_test/lb_rule_test.c b/tools/lb_rule_test/lb_rule_test.c
deleted file mode 100644
index 6ea7280..0000000
--- a/tools/lb_rule_test/lb_rule_test.c
+++ /dev/null
@@ -1,541 +0,0 @@
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include<arpa/inet.h>
-#include <getopt.h>
-#include <stdlib.h>
-#include <ctrlmsg.h>
-#include <ctrlmsg_define.h>
-#include <cJSON.h>
-#include <MESA_prof_load.h>
-#include <rte_flow.h>
-#include <sc_flow.h>
-#include <rte_version.h>
-#include <rpc.h>
-
-#define GLOBAL_CONF_FILE_PATH "/opt/tsg/mrzcpd/etc/mrglobal.conf"
-#define MR_CLI_ARG_LIST "hcsdg:iep:"
-#define MR_CLI_RESPONSE_DISABLE 0
-#define MR_CLI_RESPONSE_ENABLE 1
-#define MR_CLI_CLOSE_DELAY 100
-
-#ifndef MR_LB_RPC_RESULT
-#define MR_LB_RPC_RESULT "Result"
-#endif
-
-#ifndef MR_LB_RPC_RESULT_ERR_INFO
-#define MR_LB_RPC_RESULT_ERR_INFO "ErrInfo"
-#endif
-
-enum mr_cli_arg
-{
- MR_CLI_ADD = 1000,
- MR_CLI_DEL,
- MR_CLI_DELETE_ALL,
- MR_CLI_ADD_FOR_ID,
- MR_CLI_DEL_FOR_ID,
- MR_CLI_LOOP,
- MR_CLI_REPEATED,
- MR_CLI_ADD_ERROR,
-};
-/* Instance */
-struct rpc_instance
-{
- volatile unsigned response_flag;
- struct rpc_client_handler * handler;
-};
-
-/* The Global ariable */
-struct rpc_instance * rpc_instance = NULL;
-
-/* Command Line Options */
-static struct option cli_options[] =
-{
- {"help", no_argument,NULL, 'h'},
- {"add", required_argument,NULL, MR_CLI_ADD},
- {"delete", required_argument,NULL, MR_CLI_DEL},
- {"delete_all", no_argument,NULL, MR_CLI_DELETE_ALL},
- {"add_id", required_argument,NULL, MR_CLI_ADD_FOR_ID},
- {"delete_id", required_argument,NULL, MR_CLI_DEL_FOR_ID},
- {"loop", no_argument,NULL, MR_CLI_LOOP},
- {"repeated", no_argument,NULL, MR_CLI_REPEATED},
- {"add_error", no_argument,NULL, MR_CLI_ADD_ERROR},
-};
-
-/* Rpc Create */
-struct rpc_instance * rpc_create()
-{
- struct rpc_instance * instance;
- instance = malloc(sizeof(struct rpc_instance));
- memset(instance, 0, sizeof(struct rpc_instance));
-
- instance->handler = rpc_client_alloc_handler(RPC_CLIENT_MODE_ASYNC);
- if(instance->handler == NULL)
- {
- printf("Alloc client handler failed\n");
- return NULL;
- }
-
- instance->response_flag = MR_CLI_RESPONSE_DISABLE;
-
- return instance;
-}
-
-void help()
-{
- printf("--add + (rule num) eg: --a 2}\n");
- printf("--delete_all eg: --delete_all}\n");
- printf("--add_id + (rule id) eg: --add_id 0 }\n");
- printf("--delete_id + (rule id) eg: --add_id 1 }\n");
- printf("--loop eg: --loop }\n");
- printf("--repeated eg: --repeated }\n");
- printf("--add_error eg: --add_error }\n");
-}
-
-/* Rpc Init */
-static int rpc_init(struct rpc_instance * instance)
-{
- char str_rpc_addr[MR_STRING_MAX] = { 0 };
- unsigned int rpc_port = 0;
-
- /* Get Ip & Port */
- MESA_load_profile_string_def(GLOBAL_CONF_FILE_PATH, "rpc", "addr", str_rpc_addr, sizeof(str_rpc_addr), CTRLMSG_DEFAULT_ADDR);
- MESA_load_profile_uint_def(GLOBAL_CONF_FILE_PATH, "rpc", "port", &rpc_port, CTRLMSG_DEFAULT_PORT);
-
- /* Change Ip Addr */
- struct sockaddr_in sockaddr_in;
- if (inet_pton(AF_INET, str_rpc_addr, &sockaddr_in.sin_addr) <= 0)
- {
- return RT_ERR;
- }
-
- /* Set Port */
- sockaddr_in.sin_port = htons(rpc_port);
- sockaddr_in.sin_family = AF_INET;
-
- /* Creat Msg Handler */
- if(rpc_client_connect(instance->handler, sockaddr_in) != 0)
- {
- printf("Client Connect Server Failed !!!\n");
- return RT_ERR;
- }
- return RT_SUCCESS;
-}
-
-void send_lb_rule_add_msg(struct rpc_instance * instance,int rule_id)
-{
- int dev_num = 0;
- char dev_str_section[MR_STRING_MAX];
- char dev_name_str[MR_STRING_MAX];
- cJSON *cjson_rule = NULL,* cjson_dev = NULL;
-
- dev_num = rule_id%2 + 1;
- cjson_rule = cJSON_CreateObject();
-
- cJSON_AddNumberToObject(cjson_rule, "GroupId", rule_id);
- cJSON_AddNumberToObject(cjson_rule, "Mode", 1);
- cJSON_AddNumberToObject(cjson_rule, "DevNum", dev_num);
-
- for (int i = 0; i < dev_num; i++)
- {
- cjson_dev = cJSON_CreateObject();
- snprintf(dev_str_section, sizeof(dev_str_section), "%s%d", "Dev", i);
- snprintf(dev_name_str, sizeof(dev_name_str), "%s%d", "nf_", i);
- cJSON_AddStringToObject(cjson_dev, "DevName", dev_name_str);
- cJSON_AddNumberToObject(cjson_dev, "DevType", 0);
- cJSON_AddItemToObject(cjson_rule,dev_str_section,cjson_dev);
- }
-
- char *req_str = cJSON_Print(cjson_rule);
- printf("Send Msg:%s\n",req_str);
-
- if(rpc_client_send_request_async(instance->handler, MR_LB_TOPIC_SINGLE_RULE_ADD, cjson_rule) != 0)
- {
- printf("Send Add Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- free(req_str);
- cJSON_Delete(cjson_rule);
-}
-
-void send_lb_rule_add_err_msg(struct rpc_instance * instance,int rule_id)
-{
- int dev_num = 0;
- char dev_str_section[MR_STRING_MAX];
- char dev_name_str[MR_STRING_MAX];
- cJSON *cjson_rule = NULL,* cjson_dev = NULL;
-
- dev_num = rule_id%2 + 1;
- cjson_rule = cJSON_CreateObject();
-
- cJSON_AddNumberToObject(cjson_rule, "GroupId", rule_id);
- cJSON_AddNumberToObject(cjson_rule, "Mode", 1);
- cJSON_AddNumberToObject(cjson_rule, "DevNum", dev_num);
-
- if (rule_id == 0)
- {
- /* Dont Config Dev Item */
- }
- else if (rule_id == 1)
- {
- /* Dont Config Dev Name */
- for (int i = 0; i < dev_num; i++)
- {
- cjson_dev = cJSON_CreateObject();
- snprintf(dev_str_section, sizeof(dev_str_section), "%s%d", "Dev", i);
- snprintf(dev_name_str, sizeof(dev_name_str), "%s%d", "nf_", i);
- cJSON_AddNumberToObject(cjson_dev, "DevType", 0);
- cJSON_AddItemToObject(cjson_rule,dev_str_section,cjson_dev);
- }
- }
- else if (rule_id == 2)
- {
- /* The Dev Name Is Invalid */
- for (int i = 0; i < dev_num; i++)
- {
- cjson_dev = cJSON_CreateObject();
- snprintf(dev_str_section, sizeof(dev_str_section), "%s%d", "Dev", i);
- snprintf(dev_name_str, sizeof(dev_name_str), "%s%d", "nf_", i);
- cJSON_AddStringToObject(cjson_dev, "DevName", "error");
- cJSON_AddNumberToObject(cjson_dev, "DevType", 0);
- cJSON_AddItemToObject(cjson_rule,dev_str_section,cjson_dev);
- }
- }
- else if (rule_id == 3)
- {
- /* Dont Config Dev Type */
- for (int i = 0; i < dev_num; i++)
- {
- cjson_dev = cJSON_CreateObject();
- snprintf(dev_str_section, sizeof(dev_str_section), "%s%d", "Dev", i);
- snprintf(dev_name_str, sizeof(dev_name_str), "%s%d", "nf_", i);
- cJSON_AddStringToObject(cjson_dev, "DevName", dev_name_str);
- cJSON_AddItemToObject(cjson_rule,dev_str_section,cjson_dev);
- }
- }
- else if (rule_id == 4)
- {
- /* The Dev Type Is Invalid */
- for (int i = 0; i < dev_num; i++)
- {
- cjson_dev = cJSON_CreateObject();
- snprintf(dev_str_section, sizeof(dev_str_section), "%s%d", "Dev", i);
- snprintf(dev_name_str, sizeof(dev_name_str), "%s%d", "nf_", i);
- cJSON_AddStringToObject(cjson_dev, "DevName", dev_name_str);
- cJSON_AddNumberToObject(cjson_dev, "DevType", 3);
- cJSON_AddItemToObject(cjson_rule,dev_str_section,cjson_dev);
- }
- }
-
- char *req_str = cJSON_Print(cjson_rule);
- printf("Send Msg:%s\n",req_str);
-
- if(rpc_client_send_request_async(instance->handler, MR_LB_TOPIC_SINGLE_RULE_ADD, cjson_rule) != 0)
- {
- printf("Send Add Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- free(req_str);
- cJSON_Delete(cjson_rule);
-}
-
-void send_lb_rule_del_msg(struct rpc_instance * instance,int rule_id)
-{
- cJSON *cjson_rule = NULL;
-
- cjson_rule = cJSON_CreateObject();
-
- cJSON_AddNumberToObject(cjson_rule, "GroupId", rule_id);
- char *req_str = cJSON_Print(cjson_rule);
- printf("Send Msg:%s\n",req_str);
-
- if(rpc_client_send_request_async(instance->handler, MR_LB_TOPIC_SINGLE_RULE_DEL, cjson_rule) != 0)
- {
- printf("Send Del Request Failed !!!\n");
- }
- else
- {
- /* Set Creat Response Disable */
- __atomic_exchange_n(&instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- free(req_str);
- cJSON_Delete(cjson_rule);
-}
-
-/* Rual Add Response */
-static int __rule_add_response_handler(cJSON *rsp, void *arg)
-{
- cJSON * j_result = NULL,* j_err_info = NULL;
- struct rpc_instance * rpc_instance = (struct rpc_instance *)arg;
-
- j_result = cJSON_GetObjectItem(rsp,MR_LB_RPC_RESULT);
-
- if (j_result == NULL)
- {
- printf("The Result Is Null !\n");
- }
- else
- {
- if ((u_int32_t)j_result->valuedouble == RT_SUCCESS)
- {
- printf("The One LB Rule Add Sucess.\n");
- }
- else
- {
- printf("One LB Rule Add Error. Error Code:%u\n",(u_int32_t)j_result->valuedouble);
- j_err_info = cJSON_GetObjectItem(rsp,MR_LB_RPC_RESULT_ERR_INFO);
- if (j_err_info == NULL)
- {
- printf("The Error Info Is Null !\n");
- }
- else
- {
- char *req_str = cJSON_Print(j_err_info);
- printf("Error Info:%s\n",req_str);
- free(req_str);
- }
- }
- }
-
- /* Set Creat Response Enable */
- __atomic_exchange_n(&rpc_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-/* Rual Delete Response */
-static int __rule_del_response_handler(cJSON *rsp, void *arg)
-{
- cJSON * j_result = NULL;
- struct rpc_instance * rpc_instance = (struct rpc_instance *)arg;
-
- j_result = cJSON_GetObjectItem(rsp,MR_LB_RPC_RESULT);
-
- if (j_result == NULL)
- {
- printf("The Result Is Null !\n");
- }
- else
- {
- if ((u_int32_t)j_result->valuedouble == RT_SUCCESS)
- {
- printf("The One LB Rule Del Sucess.\n");
- }
- else
- {
- printf("One LB Rule Del Error. Error Code:%d\n",(u_int32_t)j_result->valuedouble);
- }
- }
-
- /* Set Creat Response Enable */
- __atomic_exchange_n(&rpc_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-int main(int argc, char * argv[])
-{
- int opt = 0,type = 0;
- uint32_t deal_num = 1024;
- char * endptr = NULL;
-
- while ((opt = getopt_long(argc, argv, MR_CLI_ARG_LIST, cli_options, NULL)) != -1)
- {
- switch (opt)
- {
- case MR_CLI_ADD:
- {
- type = MR_CLI_ADD;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_DEL:
- {
- type = MR_CLI_DEL;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_DELETE_ALL:
- {
- type = MR_CLI_DELETE_ALL;
- deal_num = 2;
- break;
- }
- case MR_CLI_ADD_FOR_ID:
- {
- type = MR_CLI_ADD_FOR_ID;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_DEL_FOR_ID:
- {
- type = MR_CLI_DEL_FOR_ID;
- deal_num = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_LOOP:
- {
- type = MR_CLI_LOOP;
- break;
- }
- case MR_CLI_REPEATED:
- {
- type = MR_CLI_REPEATED;
- break;
- }
- case MR_CLI_ADD_ERROR:
- {
- type = MR_CLI_ADD_ERROR;
- break;
- }
-
- default:
- help();
- return 0;
- break;
- }
- }
-
- /* Create instance */
- rpc_instance = rpc_create();
- if (rpc_instance == NULL)
- {
- fprintf(stderr, "LB Rult Test instance create failed. ");
- return 0;
- }
-
- if(rpc_client_recv_response_register(rpc_instance->handler, MR_LB_TOPIC_SINGLE_RULE_ADD, __rule_add_response_handler , rpc_instance) != 0)
- {
- printf("Register Add Response Callback Failed !!!\n");
- return 0;
- }
-
- if(rpc_client_recv_response_register(rpc_instance->handler, MR_LB_TOPIC_SINGLE_RULE_DEL, __rule_del_response_handler , rpc_instance) != 0)
- {
- printf("Register Del Response Callback Failed !!!\n");
- return 0;
- }
-
- if (rpc_init(rpc_instance) != RT_SUCCESS)
- {
- fprintf(stderr, "Rpc module initialization failed. ");
- return 0;
- }
-
- if(rpc_client_dispatch_thread(rpc_instance->handler) != 0)
- {
- printf("Client Start Dispach Thread Failed !!!\n");
- return 0;
- }
-
- /* Send Requeset Msg */
- if (type == MR_CLI_ADD)
- {
- /* Send Create Requeset Msg */
- for (int i = 0; i < deal_num; i ++)
- {
- printf("Send Add:%d\n",i);
- send_lb_rule_add_msg(rpc_instance,i);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- }
- else if ((type == MR_CLI_DEL) || (type == MR_CLI_DELETE_ALL))
- {
- for (int i = (deal_num - 1); i >= 0; i --)
- {
- printf("Send Delete:%d\n",i);
- send_lb_rule_del_msg(rpc_instance,i);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- }
- else if (type == MR_CLI_ADD_FOR_ID)
- {
- printf("Send Add:%d\n",deal_num);
- send_lb_rule_add_msg(rpc_instance,deal_num);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- else if (type == MR_CLI_DEL_FOR_ID)
- {
- printf("Send Delete:%d\n",deal_num);
- send_lb_rule_del_msg(rpc_instance,deal_num);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- else if (type == MR_CLI_LOOP)
- {
- while (1)
- {
- /* Send Create Requeset Msg */
- for (int i = 0; i < 2; i ++)
- {
- printf("Send Add:%d\n",i);
- send_lb_rule_add_msg(rpc_instance,i);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
-
- for (int i = 1; i >= 0; i --)
- {
- printf("Send Delete:%d\n",i);
- send_lb_rule_del_msg(rpc_instance,i);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- }
- }
- else if (type == MR_CLI_REPEATED)
- {
- /* Send Create Requeset Msg */
- for (int i = 0; i < 2; i ++)
- {
- printf("Send Add:%d\n",i);
- send_lb_rule_add_msg(rpc_instance,0);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- }
- else if (type == MR_CLI_ADD_ERROR)
- {
- /* Send Create Requeset Msg */
- for (int i = 0; i < 5; i ++)
- {
- printf("Send Add:%d\n",i);
- send_lb_rule_add_err_msg(rpc_instance,i);
- while (__atomic_load_n(&rpc_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_DISABLE)
- {
- usleep(1);
- }
- }
- }
- else
- {
- help();
- }
-
- return RT_SUCCESS;
-} \ No newline at end of file
diff --git a/tools/monit_device/CMakeLists.txt b/tools/monit_device/CMakeLists.txt
index 56ffdfc..8fe615b 100644
--- a/tools/monit_device/CMakeLists.txt
+++ b/tools/monit_device/CMakeLists.txt
@@ -1,2 +1,11 @@
-configure_file(monit_device.py monit_device)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/monit_device DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
+set(PI_DIST_PATH ${CMAKE_CURRENT_BINARY_DIR}/pi_dist)
+
+add_custom_command(OUTPUT ${PI_DIST_PATH}/monit_device
+ COMMAND python3 -m nuitka --standalone --onefile
+ --output-dir=${PI_DIST_PATH}
+ -o monit_device
+ ${CMAKE_CURRENT_SOURCE_DIR}/monit_device.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/monit_device.py)
+
+add_custom_target(monit_device ALL DEPENDS ${PI_DIST_PATH}/monit_device)
+install(PROGRAMS ${PI_DIST_PATH}/monit_device DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/monit_device/monit_device.py b/tools/monit_device/monit_device.py
index 8b906c8..fd5e9e0 100755
--- a/tools/monit_device/monit_device.py
+++ b/tools/monit_device/monit_device.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python2
-
import prettytable
import argparse
import json
@@ -10,7 +8,7 @@ import os
import socket
from functools import partial
-from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+from http.server import HTTPServer, BaseHTTPRequestHandler
TBPS = (1 * 1000 * 1000 * 1000 * 1000)
GBPS = (1 * 1000 * 1000 * 1000)
diff --git a/tools/monit_obp/CMakeLists.txt b/tools/monit_obp/CMakeLists.txt
index f420dbb..4194426 100644
--- a/tools/monit_obp/CMakeLists.txt
+++ b/tools/monit_obp/CMakeLists.txt
@@ -1,2 +1,11 @@
-configure_file(monit_obp.py monit_obp)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/monit_obp DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
+set(PI_DIST_PATH ${CMAKE_CURRENT_BINARY_DIR}/pi_dist)
+
+add_custom_command(OUTPUT ${PI_DIST_PATH}/monit_obp
+ COMMAND python3 -m nuitka --standalone --onefile
+ --output-dir=${PI_DIST_PATH}
+ -o monit_obp
+ ${CMAKE_CURRENT_SOURCE_DIR}/monit_obp.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/monit_obp.py)
+
+add_custom_target(monit_obp ALL DEPENDS ${PI_DIST_PATH}/monit_obp)
+install(PROGRAMS ${PI_DIST_PATH}/monit_obp DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/monit_obp/monit_obp.py b/tools/monit_obp/monit_obp.py
index be77da9..550cd5f 100644
--- a/tools/monit_obp/monit_obp.py
+++ b/tools/monit_obp/monit_obp.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python2
-
import prettytable
import argparse
import json
@@ -10,7 +8,7 @@ import os
import socket
from functools import partial
-from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+from http.server import HTTPServer, BaseHTTPRequestHandler
TBPS = (1 * 1000 * 1000 * 1000 * 1000)
GBPS = (1 * 1000 * 1000 * 1000)
diff --git a/tools/monit_stream/CMakeLists.txt b/tools/monit_stream/CMakeLists.txt
index c68acc1..069f9fc 100644
--- a/tools/monit_stream/CMakeLists.txt
+++ b/tools/monit_stream/CMakeLists.txt
@@ -1,2 +1,11 @@
-configure_file(monit_stream.py monit_stream)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/monit_stream DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
+set(PI_DIST_PATH ${CMAKE_CURRENT_BINARY_DIR}/pi_dist)
+
+add_custom_command(OUTPUT ${PI_DIST_PATH}/monit_stream
+ COMMAND python3 -m nuitka --standalone --onefile
+ --output-dir=${PI_DIST_PATH}
+ -o monit_stream
+ ${CMAKE_CURRENT_SOURCE_DIR}/monit_stream.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/monit_stream.py)
+
+add_custom_target(monit_stream ALL DEPENDS ${PI_DIST_PATH}/monit_stream)
+install(PROGRAMS ${PI_DIST_PATH}/monit_stream DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/monit_stream/monit_stream.py b/tools/monit_stream/monit_stream.py
index 15f30d8..efe8f78 100755
--- a/tools/monit_stream/monit_stream.py
+++ b/tools/monit_stream/monit_stream.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python2
-
import argparse
import json
import prettytable
@@ -9,7 +7,7 @@ import signal
import os
from functools import partial
-from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+from http.server import HTTPServer, BaseHTTPRequestHandler
TBPS = (1 * 1000 * 1000 * 1000 * 1000)
GBPS = (1 * 1000 * 1000 * 1000)
@@ -317,8 +315,7 @@ def dump_apm_sendlog(json_fp, telegraf_client, appsym, user_interface, title_vec
def setup_argv_parser(applist):
- parser = argparse.ArgumentParser(description='Marsio ZeroCopy Tools -- Monitor stream information',
- version='Marsio ZeroCopy Tools Suite 4.1')
+ parser = argparse.ArgumentParser(description='Marsio ZeroCopy Tools -- Monitor stream information')
parser.add_argument('-t', '--time', help='interval, seconds to wait between updates',
type=int, default=1)
diff --git a/tools/mrctl/CMakeLists.txt b/tools/mrctl/CMakeLists.txt
deleted file mode 100644
index 1f79031..0000000
--- a/tools/mrctl/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-find_package(DPDK REQUIRED)
-find_package(SYSTEMD REQUIRED)
-
-include_directories(${CMAKE_SOURCE_DIR}/service/include)
-include_directories(${DPDK_INCLUDE_DIR})
-
-add_executable(mrctl mrctl.c)
-target_link_libraries(mrctl MESA_prof_load_static infra m MESA_htable_static ${SYSTEMD_LIBRARIES})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/mrctl DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/mrctl/mrctl.c b/tools/mrctl/mrctl.c
deleted file mode 100644
index 83fcde6..0000000
--- a/tools/mrctl/mrctl.c
+++ /dev/null
@@ -1,2099 +0,0 @@
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include<arpa/inet.h>
-#include <getopt.h>
-#include <stdlib.h>
-#include <ctrlmsg.h>
-#include <ctrlmsg_define.h>
-#include <cJSON.h>
-#include <MESA_prof_load.h>
-#include <rte_flow.h>
-#include <sc_flow.h>
-#include <rte_version.h>
-
-#define GLOBAL_CONF_FILE_PATH "/opt/tsg/mrzcpd/etc/mrglobal.conf"
-#define MR_CLI_ARG_LIST "hcsdg:iep:"
-#define MR_CLI_RESPONSE_DISABLE 0
-#define MR_CLI_RESPONSE_ENABLE 1
-#define MR_CLI_CLOSE_DELAY 100
-
-/* Cli Arg List */
-enum mr_cli_arg
-{
- MR_CLI_ATTR_PRIORITY = 1000,
- MR_CLI_DELETE_RULE_ID,
- MR_CLI_DELETE_ALL,
- MR_CLI_GET_COUNT,
- MR_CLI_COUNT_RULE_ID,
- MR_CLI_COUNT_ALL,
- MR_CLI_ITEM_ETHER,
- MR_CLI_ITEM_ETHER_SMAC,
- MR_CLI_ITEM_ETHER_DMAC,
- MR_CLI_ITEM_ETHER_SMAC_MASK,
- MR_CLI_ITEM_ETHER_DMAC_MASK,
- MR_CLI_ITEM_ETHER_TYPE,
- MR_CLI_ITEM_ETHER_HAS_VLAN,
- MR_CLI_ITEM_IPV4,
- MR_CLI_ITEM_IPV4_TOS,
- MR_CLI_ITEM_IPV4_FRAGMENT_OFFSET,
- MR_CLI_ITEM_IPV4_TTL,
- MR_CLI_ITEM_IPV4_PROTO,
- MR_CLI_ITEM_IPV4_SRC,
- MR_CLI_ITEM_IPV4_SRC_MASK,
- MR_CLI_ITEM_IPV4_DST,
- MR_CLI_ITEM_IPV4_DST_MASK,
- MR_CLI_ITEM_UDP,
- MR_CLI_ITEM_UDP_SRC_PORT,
- MR_CLI_ITEM_UDP_SRC_PORT_MASK,
- MR_CLI_ITEM_UDP_DST_PORT,
- MR_CLI_ITEM_UDP_DST_PORT_MASK,
- MR_CLI_ITEM_TCP,
- MR_CLI_ITEM_TCP_SRC_PORT,
- MR_CLI_ITEM_TCP_SRC_PORT_MASK,
- MR_CLI_ITEM_TCP_DST_PORT,
- MR_CLI_ITEM_TCP_DST_PORT_MASK,
- MR_CLI_ITEM_TCP_FLAGS,
- MR_CLI_ITEM_VXLAN,
- MR_CLI_ITEM_VXLAN_VNI,
- MR_CLI_ITEM_VXLAN_VNI_MASK,
- MR_CLI_ACTION_COUNT,
- MR_CLI_ACTION_COUNT_SHARED,
- MR_CLI_ACTION_COUNT_ID,
- MR_CLI_ACTION_DROP,
- MR_CLI_ACTION_QUEUE,
- MR_CLI_ACTION_QUEUE_INDEX,
- MR_CLI_ACTION_SET_SRC_MAC,
- MR_CLI_ACTION_SET_SRC_MAC_ARG,
- MR_CLI_ACTION_SET_DST_MAC,
- MR_CLI_ACTION_SET_DST_MAC_ARG,
-};
-
-/* Rule Flag */
-enum mr_cli_rule_flag
-{
- MR_RULE_TYPE_ENABLE = 1 << 0,
- MR_RULE_ITEM_ENABLE = 1 << 1,
- MR_RULE_ACTION_ENABLE = 1 << 2,
- MR_RULE_VALID = (MR_RULE_TYPE_ENABLE | MR_RULE_ITEM_ENABLE | MR_RULE_ACTION_ENABLE),
-};
-
-/* Instance */
-struct mrctl_instance
-{
- volatile unsigned response_flag;
- struct ctrlmsg_handler * ctrlmsg_handler;
-};
-
-/* The Global ariable */
-struct mrctl_instance * mrctl_instance = NULL;
-unsigned int g_logger_to_stdout = 1;
-unsigned int g_logger_level = LOG_DEBUG;
-struct mrctl_flow_rule * rule_global;
-
-/* Command Line Options */
-static struct option cli_options[] =
-{
- {"help", no_argument,NULL, 'h'},
- {"create", no_argument,NULL, 'c'},
- {"delete", no_argument,NULL, 'd'},
- {"rule_id", required_argument,NULL, MR_CLI_DELETE_RULE_ID},
- {"all", no_argument,NULL, MR_CLI_DELETE_ALL},
- {"search", no_argument,NULL, 's'},
- {"get_count", no_argument,NULL, MR_CLI_GET_COUNT},
- {"count_rule_id", required_argument,NULL, MR_CLI_COUNT_RULE_ID},
- {"count_all", no_argument,NULL, MR_CLI_COUNT_ALL},
- {"ingress", no_argument,NULL, 'i'},
- {"egress", no_argument,NULL, 'e'},
- {"portname", required_argument,NULL, 'p'},
- {"group", required_argument,NULL, 'g'},
- {"priority", required_argument,NULL, MR_CLI_ATTR_PRIORITY},
- {"ether", no_argument,NULL, MR_CLI_ITEM_ETHER},
- {"smac", required_argument,NULL, MR_CLI_ITEM_ETHER_SMAC},
- {"dmac", required_argument,NULL, MR_CLI_ITEM_ETHER_DMAC},
- {"smac_mask", required_argument,NULL, MR_CLI_ITEM_ETHER_SMAC_MASK},
- {"dmac_mask", required_argument,NULL, MR_CLI_ITEM_ETHER_DMAC_MASK},
- {"ethertype", required_argument,NULL, MR_CLI_ITEM_ETHER_TYPE},
- {"hasvlan", no_argument,NULL, MR_CLI_ITEM_ETHER_HAS_VLAN},
- {"ipv4", no_argument,NULL, MR_CLI_ITEM_IPV4},
- {"tos", required_argument,NULL, MR_CLI_ITEM_IPV4_TOS},
- {"fragment_offset", required_argument,NULL, MR_CLI_ITEM_IPV4_FRAGMENT_OFFSET},
- {"ttl", required_argument,NULL, MR_CLI_ITEM_IPV4_TTL},
- {"proto", required_argument,NULL, MR_CLI_ITEM_IPV4_PROTO},
- {"src", required_argument,NULL, MR_CLI_ITEM_IPV4_SRC},
- {"src_mask", required_argument,NULL, MR_CLI_ITEM_IPV4_SRC_MASK},
- {"dst", required_argument,NULL, MR_CLI_ITEM_IPV4_DST},
- {"dst_mask", required_argument,NULL, MR_CLI_ITEM_IPV4_DST_MASK},
- {"udp", no_argument,NULL, MR_CLI_ITEM_UDP},
- {"udp_sport", required_argument,NULL, MR_CLI_ITEM_UDP_SRC_PORT},
- {"udp_sport_mask", required_argument,NULL, MR_CLI_ITEM_UDP_SRC_PORT_MASK},
- {"udp_dport", required_argument,NULL, MR_CLI_ITEM_UDP_DST_PORT},
- {"udp_dport_mask", required_argument,NULL, MR_CLI_ITEM_UDP_DST_PORT_MASK},
- {"tcp", no_argument,NULL, MR_CLI_ITEM_TCP},
- {"tcp_sport", required_argument,NULL, MR_CLI_ITEM_TCP_SRC_PORT},
- {"tcp_sport_mask", required_argument,NULL, MR_CLI_ITEM_TCP_SRC_PORT_MASK},
- {"tcp_dport", required_argument,NULL, MR_CLI_ITEM_TCP_DST_PORT},
- {"tcp_dport_mask", required_argument,NULL, MR_CLI_ITEM_TCP_DST_PORT_MASK},
- {"tcp_flags", required_argument,NULL, MR_CLI_ITEM_TCP_FLAGS},
- {"vxlan", no_argument,NULL, MR_CLI_ITEM_VXLAN},
- {"vni", required_argument,NULL, MR_CLI_ITEM_VXLAN_VNI},
- {"vni_mask", required_argument,NULL, MR_CLI_ITEM_VXLAN_VNI_MASK},
- {"count", no_argument,NULL, MR_CLI_ACTION_COUNT},
- {"shared", no_argument,NULL, MR_CLI_ACTION_COUNT_SHARED},
- {"countid", required_argument,NULL, MR_CLI_ACTION_COUNT_ID},
- {"drop", no_argument,NULL, MR_CLI_ACTION_DROP},
- {"queue", no_argument,NULL, MR_CLI_ACTION_QUEUE},
- {"index", required_argument,NULL, MR_CLI_ACTION_QUEUE_INDEX},
- {"set_smac", no_argument,NULL, MR_CLI_ACTION_SET_SRC_MAC},
- {"smac_arg", required_argument,NULL, MR_CLI_ACTION_SET_SRC_MAC_ARG},
- {"set_dmac", no_argument,NULL, MR_CLI_ACTION_SET_DST_MAC},
- {"dmac_arg", required_argument,NULL, MR_CLI_ACTION_SET_DST_MAC_ARG},
-};
-
-/* Help Info */
-int help()
-{
- printf("Usage: mrctl {Attr} {Items} {Actions}\n");
- /* Attr */
- printf("Attr:\n");
- printf(" Must Choose:\n");
- printf(" RuleType : -c,--create eg: -c\n");
- printf(" -d,--delete eg: -c\n");
- printf(" -s,--search eg: -c\n");
- printf(" --get_count eg: --get_count\n");
- printf(" Create Must Choose:\n");
- printf(" Direction : -i,--ingress eg: -i\n");
- printf(" -e,--egress eg: -e\n");
- printf(" Portname : -p,--portname eg: -p ens18f1\n");
- printf(" Optional:\n");
- printf(" Group : -g,--group eg: -g 1 \n");
- printf(" Priority : --priority eg: --priority 1\n");
- printf("\n");
-
- /* Delete */
- printf("Delete Arg:\n");
- printf(" Must Choose:\n");
- printf(" RuleId : --rule_id eg: --rule_id 0\n");
- printf(" --all eg: --all\n");
-
- /* Get Rule Count */
- printf("Get Rule Count:\n");
- printf(" Must Choose:\n");
- printf(" CountRuleId : --count_rule_id eg: --count_rule_id 0\n");
- printf(" --count_all eg: --count_all\n");
-
- /* Items */
- printf("Items: Must Choose One Item\n");
- printf(" Ether : --ether eg: --ether\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" SrcMac : --smac eg: --smac C8:3A:35:09:EF:A1 \n");
- printf(" DstMac : --dmac eg: --dmac 08:C0:EB:97:D2:37\n");
- printf(" SrcMacMask : --smac_mask eg: --smac_mask FF:FF:FF:FF:FF:FF\n");
- printf(" DstMacMask : --dmac_mask eg: --dmac_mask FF:FF:FF:FF:FF:FF\n");
- printf(" EtherType : --ethertype eg: --ethertype ipv4 (OnlySupport ipv4 ipv6 vlan)\n");
- printf(" HasVlan : --hasvlan eg: --hasvlan\n");
-
- printf(" IPv4 : --ipv4 eg: --ipv4\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" Tos : --tos eg: --tos 0 \n");
- printf(" FragmentOffset: --fragment_offset eg: --fragment_offset 0 \n");
- printf(" Ttl : --ttl eg: --ttl 64 \n");
- printf(" Proto : --proto eg: --proto udp (Only Support 'tcp' 'udp') \n");
- printf(" Src : --src eg: --src 123.101.255.252 \n");
- printf(" SrcMask : --src_mask eg: --src_mask 255.255.255.255 \n");
- printf(" Dst : --dst eg: --dst 123.101.255.253 \n");
- printf(" DstMask : --dst_mask eg: --dst_mask 255.255.255.255 \n");
-
- printf(" Udp : --udp eg: --udp\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" SrcPort : --udp_sport eg: --udp_sport 4789 \n");
- printf(" SrcPortMask : --udp_sport_mask eg: --udp_sport_mask 65535 \n");
- printf(" DstPort : --udp_dport eg: --udp_dport 4789 \n");
- printf(" DstPortMask : --udp_dport_mask eg: --udp_dport_mask 65535 \n");
-
- printf(" Tcp : --tcp eg: --tcp\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" SrcPort : --tcp_sport eg: --tcp_sport 60000 \n");
- printf(" SrcPortMask : --tcp_sport_mask eg: --tcp_sport_mask 65535 \n");
- printf(" DstPort : --tcp_dport eg: --tcp_dport 80 \n");
- printf(" DstPortMask : --tcp_dport_mask eg: --tcp_dport_mask 65535 \n");
- printf(" Flags : --tcp_flags eg: --tcp_flags 11 \n");
-
- printf(" Vxlan : --vxlan eg: --vxlan\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" Vni : --vni eg: --vni 123456789 \n");
- printf(" VniMask : --vni_mask eg: --vni_mask 16777215 \n");
- printf("\n");
-
- /* Actions */
- printf("Actions: Must Choose One Action\n");
- printf(" Count : --count eg: --count\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" Shared : --shared eg: --shared \n");
- printf(" Countid : --countid eg: --countid 11 \n");
-
- printf(" Drop : --drop eg: --drop\n");
-
- printf(" Queue : --queue eg: --queue\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" Index : --index eg: --index 7 \n");
-
- printf(" SetSmac : --set_smac eg: --set_smac\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" SmacArg : --smac_arg eg: --smac_arg 08:c0:eb:97:d2:37 \n");
-
- printf(" SetDmac : --set_dmac eg: --set_dmac\n");
- printf(" Arg : Must Choose One Arg\n");
- printf(" DmacArg : --dmac_arg eg: --dmac_arg c8:3a:35:09:ef:a1 \n");
- /* Eg */
- printf("Create Eg:\n");
- printf("mrctl -c -p eth_pf_100G_1 -g 1 --priority 1 -i --ether --smac c8:3a:35:09:ef:a1 --dmac 08:c0:eb:97:d2:37 --ethertype ipv4 --dmac_mask ff:ff:ff:ff:ff:ff --smac_mask ff:ff:ff:ff:ff:ff --ipv4 --tos 0 --ttl 64 --proto udp --src 123.101.255.252 --src_mask 255.255.255.255 --dst 123.101.255.253 --udp --udp_sport 4789 --udp_sport_mask 65535 --udp_dport 4789 --udp_dport_mask 65535 --dst_mask 255.255.255.255 --vxlan --vni 0 --vni_mask 16777215 --queue --index 7 --set_smac --smac_arg 08:c0:eb:97:d2:37 --set_dmac --dmac_arg c8:3a:35:09:ef:a1\n");
- printf("Search Eg:\n");
- printf("mrctl -s\n");
- printf("Delete Eg:\n");
- printf("mrctl -d --rule_id 1\n");
- printf("mrctl -d --all\n");
- printf("Get Count Eg:\n");
- printf("mrctl --get_count --count_rule_id 1\n");
- printf("mrctl --get_count --count_all\n");
- return RT_SUCCESS;
-}
-
-/* rte_ether_addr to str */
-void ether_format_addr(char *buf, uint16_t size,
- const struct rte_ether_addr *eth_addr)
-{
- snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X",
- eth_addr->addr_bytes[0],
- eth_addr->addr_bytes[1],
- eth_addr->addr_bytes[2],
- eth_addr->addr_bytes[3],
- eth_addr->addr_bytes[4],
- eth_addr->addr_bytes[5]);
-}
-
-/* Rule Check */
-int rule_check(struct mrctl_flow_rule * rule_item)
-{
- struct mr_flow_item_ether * ether_item = NULL;
- struct mr_flow_item_ipv4 * ipv4_item = NULL;
- struct mr_flow_item_udp * udp_item = NULL;
- struct mr_flow_item_tcp * tcp_item = NULL;
- struct mr_flow_item_vxlan * vxlan_item = NULL;
- struct mr_flow_action_count * count_action = NULL;
- struct mr_flow_action_queue * queue_action = NULL;
- struct mr_flow_action_set_mac * set_src_mac_action = NULL, * set_dst_mac_action = NULL;
-
- ether_item = &rule_item->items[MR_RULE_FLOW_ITEM_ETHER].ether_item;
- ipv4_item = &rule_item->items[MR_RULE_FLOW_ITEM_IPV4].ipv4_item;
- udp_item = &rule_item->items[MR_RULE_FLOW_ITEM_UDP].udp_item;
- tcp_item = &rule_item->items[MR_RULE_FLOW_ITEM_TCP].tcp_item;
- vxlan_item = &rule_item->items[MR_RULE_FLOW_ITEM_VXLAN].vxlan_item;
- count_action = &rule_item->actions[MR_RULE_FLOW_ACTION_COUNT].count;
- queue_action = &rule_item->actions[MR_RULE_FLOW_ACTION_QUEUE].queue;
- set_src_mac_action = &rule_item->actions[MR_RULE_FLOW_ACTION_SET_SRC_MAC].set_src_mac;
- set_dst_mac_action = &rule_item->actions[MR_RULE_FLOW_ACTION_SET_DST_MAC].set_dst_mac;
-
- if (rule_item->rule_type == MR_RULE_CREATE)
- {
- /* 1. Check Attr */
- /* 1.1 Check Rule Type */
- if (rule_item->rule_type == MR_RULE_TYEP_NO_SET)
- {
- printf("ERROR : RuleType Need Must Choose \n");
- return RT_ERR;
- }
-
- /* 1.2 Check Direction */
- if ((!(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_INGRESS_ENABLE)) && (!(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_INGRESS_ENABLE)) )
- {
- printf("ERROR : Direction Need Must Choose \n");
- return RT_ERR;
- }
-
- /* 1.3 Check PortName */
- if (!(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_PORTNAME_ENABLE) )
- {
- printf("ERROR : Portname Need Must Set \n");
- return RT_ERR;
- }
-
- /* 2. Check Items */
- /* 2.1 Check Items Num */
- if (rule_item->item_num == 0)
- {
- printf("ERROR : Choose At Least One Item \n");
- return RT_ERR;
- }
-
- /* 2.2 Check Ether Item */
- if ((rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_ETHER) && (ether_item->arg_flag == MR_RULE_FLOW_ETHER_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One Ether Arg \n");
- return RT_ERR;
- }
- /* 2.3 Check IPv4 Item */
- if ((rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_IPV4) && (ipv4_item->arg_flag == MR_RULE_FLOW_IPV4_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One IPv4 Arg \n");
- return RT_ERR;
- }
-
- /* 2.4 Check UDP Item */
- if ((rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_UDP) && (udp_item->arg_flag == MR_RULE_FLOW_UDP_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One UDP Arg \n");
- return RT_ERR;
- }
-
- /* 2.5 Check TCP Item */
- if ((rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_TCP) && (tcp_item->arg_flag == MR_RULE_FLOW_TCP_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One TCP Arg \n");
- return RT_ERR;
- }
-
- /* 2.6 Check VXLAN Item */
- if ((rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_VXLAN) && (vxlan_item->arg_flag == MR_RULE_FLOW_VXLAN_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One VXLAN Arg \n");
- return RT_ERR;
- }
-
- /* 3. Check Actions */
- /* 3.1 Check Actions Num */
- if (rule_item->action_num == 0)
- {
- printf("ERROR : Choose At Least One Action \n");
- return RT_ERR;
- }
-
- /* 3.2 Check Count Action */
- if ((rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_COUNT) && (count_action->arg_flag == MR_RULE_FLOW_COUNT_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One Count Arg \n");
- return RT_ERR;
- }
-
- /* 3.3 Check Queue Action */
- if ((rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_QUEUE) && (queue_action->arg_flag == MR_RULE_FLOW_QUEUE_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One Queue Arg \n");
- return RT_ERR;
- }
-
- /* 3.4 Check Set Src Mac Action */
- if ((rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_SET_SRC_MAC) && (set_src_mac_action->arg_flag == MR_RULE_FLOW_SET_SRC_MAC_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One Set Src Mac Arg \n");
- return RT_ERR;
- }
-
- /* 3.5 Check Set Dst Mac Action */
- if ((rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_SET_DST_MAC) && (set_dst_mac_action->arg_flag == MR_RULE_FLOW_SET_DST_MAC_ARG_NOT_SET))
- {
- printf("ERROR : Set At Least One Set Dst Mac Arg \n");
- return RT_ERR;
- }
- }
- else if (rule_item->rule_type == MR_RULE_DELETE)
- {
- if (rule_item->delete.arg_flag == MR_RULE_FLOW_DELETE_ARG_NOT_SET )
- {
- printf("ERROR : Set At Least One Delete Arg \n");
- return RT_ERR;
- }
- }
- else if (rule_item->rule_type == MR_RULE_GET_RULE_COUNT)
- {
- if (rule_item->get_count.arg_flag == MR_RULE_FLOW_GET_RULE_COUNT_ARG_NOT_SET )
- {
- printf("ERROR : Set At Least One Get Count Arg \n");
- return RT_ERR;
- }
- }
- return RT_SUCCESS;
-}
-
-/* Mrctl Create */
-struct mrctl_instance * mrctl_create()
-{
- struct mrctl_instance * instance;
- instance = malloc(sizeof(struct mrctl_instance));
- memset(instance, 0, sizeof(struct mrctl_instance));
-
- instance->response_flag = MR_CLI_RESPONSE_DISABLE;
-
- return instance;
-}
-
-/* Ctrlmsg Init */
-static int mrctl_ctrlmsg_init(struct mrctl_instance * instance)
-{
- char str_ctrlmsg_addr[MR_STRING_MAX] = { 0 };
- unsigned int ctrlmsg_port = 0;
- unsigned int loglevel = g_logger_level + 1;
-
- /* Get Ip & Port */
- MESA_load_profile_string_def(GLOBAL_CONF_FILE_PATH, "ctrlmsg", "listen_addr", str_ctrlmsg_addr, sizeof(str_ctrlmsg_addr), CTRLMSG_DEFAULT_ADDR);
- MESA_load_profile_uint_def(GLOBAL_CONF_FILE_PATH, "ctrlmsg", "listen_port", &ctrlmsg_port, CTRLMSG_DEFAULT_PORT);
- MESA_load_profile_uint_def(GLOBAL_CONF_FILE_PATH, "eal", "loglevel", &loglevel, loglevel);
- g_logger_level = loglevel - 1;
-
- /* Change Ip Addr */
- struct sockaddr_in sockaddr_in;
- if (inet_pton(AF_INET, str_ctrlmsg_addr, &sockaddr_in.sin_addr) <= 0)
- {
- MR_CFGERR_INVALID_FORMAT(GLOBAL_CONF_FILE_PATH, "ctrlmsg", "listen_addr");
- return RT_ERR;
- }
-
- /* Set Port */
- sockaddr_in.sin_port = htons(ctrlmsg_port);
- sockaddr_in.sin_family = AF_INET;
-
- /* Creat Msg Handler */
- instance->ctrlmsg_handler = ctrlmsg_handler_create(CTRLMSG_HANDLER_MODE_CLIENT, sockaddr_in, NULL, -1);
- if (instance->ctrlmsg_handler == NULL) return RT_ERR;
- return RT_SUCCESS;
-}
-
-static int __conn_close_handler(struct ctrlmsg_handler * ct_hand,
- struct ctrlmsg_conn * ct_conn, struct ctrl_msg_header * msg, void * arg)
-{
- MR_INFO("Ctrlplane connection is terminated, Exit. ");
- exit(EXIT_FAILURE);
-}
-
-/* Flow create response */
-static int __flow_create_response_handler(struct ctrlmsg_handler * ct_hand, struct ctrlmsg_conn * ct_conn, struct ctrl_msg_header * msg, void * arg)
-{
- cJSON* cjson_error = NULL;
- struct ctrl_msg_flow_response * rep_msg = (struct ctrl_msg_flow_response *)msg;
- struct mrctl_instance * mrctl_instance = (struct mrctl_instance *)arg;
-
- if (rep_msg->msg_err.errcode == RT_SUCCESS)
- {
- printf("The Flow Rule Create Sucess.\n");
- }
- else
- {
- printf("The Flow Rule Create Error.\n");
- cjson_error = cJSON_Parse((char *)rep_msg->msg_err.strerr);
- if (cjson_error == NULL)
- {
- printf("Cant Parsing The Error Json Str.\n");
- }
- cJSON * cj_error_info = cJSON_GetObjectItem(cjson_error,MR_CJSON_KEY_ERROR_INFO);
- if (cj_error_info == NULL)
- {
- printf("Cant Parsing The Error Info From Json.\n");
- }
- printf("Reason : %s\n",cj_error_info->valuestring);
- }
-
- /* Set Creat Response Enable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-/* Flow Search Response */
-static int __flow_search_response_handler(struct ctrlmsg_handler * ct_hand, struct ctrlmsg_conn * ct_conn, struct ctrl_msg_header * msg, void * arg)
-{
- cJSON* cjson_search_response = NULL;
- struct ctrl_msg_flow_response * rep_msg = (struct ctrl_msg_flow_response *)msg;
- struct mrctl_instance * mrctl_instance = (struct mrctl_instance *)arg;
-
- if (rep_msg->msg_err.errcode == RT_SUCCESS)
- {
- cjson_search_response = cJSON_Parse((char *)rep_msg->msg_err.strerr);
-
- /* Parsing Success Info Str */
- cJSON * cjson_search_success = cJSON_GetObjectItem(cjson_search_response,MR_CJSON_KEY_SUCCESS_INFO);
- if (cjson_search_success == NULL)
- {
- printf("Cant Get The Search Success Info.\n");
- return RT_ERR;
- }
-
- /* Parsing Success Info */
- cJSON * cjson_search_success_info = cJSON_Parse((char *)cjson_search_success->valuestring);
- if (cjson_search_success_info == NULL)
- {
- printf("Cant Parsing The Search Success Info.\n");
- return RT_ERR;
- }
-
- cJSON * cjson_flow_rule_num = cJSON_GetObjectItem(cjson_search_success_info,MR_CJSON_KEY_RULE_NUM);
- cJSON * cjson_flow_rule_info = cJSON_GetObjectItem(cjson_search_success_info,MR_CJSON_KEY_RULE_INFO);
- cJSON * cjson_flow_rule_end = cJSON_GetObjectItem(cjson_search_success_info,MR_CJSON_KEY_RULE_END);
-
- if (cjson_flow_rule_num != NULL)
- {
- printf("The Flow Rule Num : %u\n",(uint32_t)cjson_flow_rule_num->valuedouble);
- }
- else if (cjson_flow_rule_info != NULL)
- {
- cJSON * cjson_flow_rule_id = cJSON_GetObjectItem(cjson_flow_rule_info,MR_CJSON_KEY_RULE_ID);
- if (cjson_flow_rule_id != NULL)
- {
- printf("ID: %u",(uint32_t)cjson_flow_rule_id->valuedouble);
- }
- cJSON * cjson_flow_rule_str = cJSON_GetObjectItem(cjson_flow_rule_info,MR_CJSON_KEY_RULE_STR);
- if (cjson_flow_rule_str != NULL)
- {
- cJSON* cjson_parse_str = cJSON_Parse(cjson_flow_rule_str->valuestring);
- if (cjson_parse_str != NULL)
- {
- /* Parsing Porte Name */
- cJSON * cj_prot_name = cJSON_GetObjectItem(cjson_parse_str,MR_CJSON_KEY_PORT_NAME);
- if (cj_prot_name != NULL)
- {
- printf(" PortName: %s",cj_prot_name->valuestring);
- }
-
- /* Parsing Rule Type */
- cJSON * cj_rule_type = cJSON_GetObjectItem(cjson_parse_str,MR_CJSON_KEY_RULE_TYPE);
- if (cj_rule_type != NULL)
- {
- if ((uint8_t)cj_rule_type->valuedouble == MR_RULE_CREATE)
- {
- printf(" Tyep: Creat");
- }
- else
- {
- printf(" Tyep: Delete");
- }
- }
-
- /* Parsing Attr */
- cJSON * cj_attr = cJSON_GetObjectItem(cjson_parse_str,MR_CJSON_KEY_ATTR);
- if (cj_attr != NULL)
- {
- /* Get Group */
- cJSON * cj_attr_group = cJSON_GetObjectItem(cj_attr,MR_CJSON_KEY_ATTR_GROUP);
- if (cj_attr_group != NULL)
- {
- printf(" Group: %u",(uint32_t)cj_attr_group->valuedouble);
- }
-
- /* Get Priority */
- cJSON * cj_attr_priority = cJSON_GetObjectItem(cj_attr,MR_CJSON_KEY_ATTR_PRIORITY);
- if (cj_attr_priority != NULL)
- {
- printf(" Priority: %u",(uint32_t)cj_attr_priority->valuedouble);
- }
-
- /* Get Ingress */
- cJSON * cj_attr_ingress = cJSON_GetObjectItem(cj_attr,MR_CJSON_KEY_ATTR_INGRESS);
- if (cj_attr_ingress != NULL)
- {
- printf(" Ingress");
- }
-
- /* Get Egress */
- cJSON * cj_attr_egress = cJSON_GetObjectItem(cj_attr,MR_CJSON_KEY_ATTR_EGRESS);
- if (cj_attr_egress != NULL)
- {
- printf(" Egress");
- }
- printf("\n");
- }
-
- /* Parsing Items */
- cJSON * cj_items = cJSON_GetObjectItem(cjson_parse_str,MR_CJSON_KEY_ITEMS);
- if (cj_items != NULL)
- {
- printf("\t Items {\n");
- /* Get Ether Item */
- cJSON * cj_ether_item = cJSON_GetObjectItem(cj_items,MR_CJSON_KEY_ETHER);
- if (cj_ether_item != NULL)
- {
- printf("\t\t Ether [");
- /* Get HasVlan */
- cJSON * cj_ether_item_hasvlan = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_HASVLAN);
- if (cj_ether_item_hasvlan != NULL)
- {
- printf(" HasVlan");
- }
-
- /* Get Smac */
- cJSON * cj_ether_item_smac = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_SMAC);
- if (cj_ether_item_smac != NULL)
- {
- printf(" SrcMac:%s",cj_ether_item_smac->valuestring);
- }
-
- /* Get Ether Item SMac Mask */
- cJSON * cj_ether_item_smac_mask = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_SMAC_MASK);
- if (cj_ether_item_smac_mask != NULL)
- {
- printf(" Mask:%s",cj_ether_item_smac_mask->valuestring);
- }
-
- /* Get Dmac */
- cJSON * cj_ether_item_dmac = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_DMAC);
- if (cj_ether_item_dmac != NULL)
- {
- printf(" DstMac:%s",cj_ether_item_dmac->valuestring);
- }
-
- /* Get Ether Item DMac Mask */
- cJSON * cj_ether_item_dmac_mask = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_DMAC_MASK);
- if (cj_ether_item_dmac_mask != NULL)
- {
- printf(" Mask:%s",cj_ether_item_dmac_mask->valuestring);
- }
-
- /* Get Ether Item Type */
- cJSON * cj_ether_item_type = cJSON_GetObjectItem(cj_ether_item,MR_CJSON_KEY_ETHER_TYPE);
- if (cj_ether_item_type != NULL)
- {
- switch ((uint16_t)cj_ether_item_type->valuedouble)
- {
- case RTE_ETHER_TYPE_IPV4:
- printf(" Type:IPV4");
- break;
- case RTE_ETHER_TYPE_IPV6:
- printf(" Type:IPV6");
- break;
- case RTE_ETHER_TYPE_VLAN:
- printf(" Type:Vlan");
- break;
- }
- }
-
- printf(" ]\n");
- }
-
- /* Get IPv4 Item */
- cJSON * cj_ipv4_item = cJSON_GetObjectItem(cj_items,MR_CJSON_KEY_IPV4);
- if (cj_ipv4_item != NULL)
- {
- printf("\t\t IPV4 [");
- /* Get IPv4 Item Tos */
- cJSON * cj_ipv4_item_tos = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_TOS);
- if (cj_ipv4_item_tos != NULL)
- {
- printf(" Tos: %u",(uint8_t)cj_ipv4_item_tos->valuedouble);
- }
-
- /* Get IPv4 Item Fragement Offset */
- cJSON * cj_ipv4_item_fragement_offset = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_FRAGMENT_OFFSET);
- if (cj_ipv4_item_fragement_offset != NULL)
- {
- printf(" Fragement Offset: %u",(uint16_t)cj_ipv4_item_fragement_offset->valuedouble);
- }
-
- /* Get IPv4 Item TTL */
- cJSON * cj_ipv4_item_ttl = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_TTL);
- if (cj_ipv4_item_ttl != NULL)
- {
- printf(" TTL: %u",(uint8_t)cj_ipv4_item_ttl->valuedouble);
- }
-
- /* Get IPv4 Item Src Addr */
- cJSON * cj_ipv4_item_src_addr = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_SADDR_STR);
- if (cj_ipv4_item_src_addr != NULL)
- {
- printf(" SrcAddr:%s",cj_ipv4_item_src_addr->valuestring);
- }
-
- /* Get IPv4 Item Src Addr Mask */
- cJSON * cj_ipv4_item_src_addr_mask = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_SADDR_MASK_STR);
- if (cj_ipv4_item_src_addr_mask != NULL)
- {
- printf(" SrcAddrMask:%s",cj_ipv4_item_src_addr_mask->valuestring);
- }
-
- /* Get IPv4 Item Dst Addr */
- cJSON * cj_ipv4_item_dst_addr = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_SADDR_MASK_STR);
- if (cj_ipv4_item_dst_addr != NULL)
- {
- printf(" DstAddr:%s",cj_ipv4_item_dst_addr->valuestring);
- }
-
- /* Get IPv4 Item Dst Addr Mask */
- cJSON * cj_ipv4_item_dst_addr_mask = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_DADDR_MASK_STR);
- if (cj_ipv4_item_dst_addr_mask != NULL)
- {
- printf(" DstAddrMask:%s",cj_ipv4_item_dst_addr->valuestring);
- }
-
- /* Get IPv4 Item Next Proto Id */
- cJSON * cj_ipv4_item_next_proto = cJSON_GetObjectItem(cj_ipv4_item,MR_CJSON_KEY_IPV4_NEXT_PROTO);
- if (cj_ipv4_item_next_proto != NULL)
- {
- switch ((uint8_t)cj_ipv4_item_next_proto->valuedouble)
- {
- case IPPROTO_TCP:
- printf(" Next Proto:TCP");
- break;
- case IPPROTO_UDP:
- printf(" Next Proto:UDP");
- break;
- }
- }
- printf(" ]\n");
- }
-
- /* Get UDP Item */
- cJSON * cj_udp_item = cJSON_GetObjectItem(cj_items,MR_CJSON_KEY_UDP);
- if (cj_udp_item == NULL)
- {
- printf("\t\t UDP [");
- /* Get UDP Item Src Port */
- cJSON * cj_udp_item_src_port = cJSON_GetObjectItem(cj_udp_item,MR_CJSON_KEY_UDP_SRC_PORT);
- if (cj_udp_item_src_port != NULL)
- {
- printf(" SrcPort: %u",(uint16_t)cj_udp_item_src_port->valuedouble);
- }
-
- /* Get UDP Item Src Port Mask */
- cJSON * cj_udp_item_src_port_mask = cJSON_GetObjectItem(cj_udp_item,MR_CJSON_KEY_UDP_SRC_PORT_MASK);
- if (cj_udp_item_src_port_mask != NULL)
- {
- printf(" SrcPortMask: %u",(uint16_t)cj_udp_item_src_port_mask->valuedouble);
- }
-
- /* Get UDP Item Dst Port */
- cJSON * cj_udp_item_dst_port = cJSON_GetObjectItem(cj_udp_item,MR_CJSON_KEY_UDP_DST_PORT);
- if (cj_udp_item_dst_port != NULL)
- {
- printf(" DstPort: %u",(uint16_t)cj_udp_item_dst_port->valuedouble);
- }
-
- /* Get UDP Item Dst Port Mask */
- cJSON * cj_udp_item_dst_port_mask = cJSON_GetObjectItem(cj_udp_item,MR_CJSON_KEY_UDP_DST_PORT_MASK);
- if (cj_udp_item_dst_port_mask == NULL)
- {
- printf(" DstPortMask: %u",(uint16_t)cj_udp_item_dst_port_mask->valuedouble);
- }
- printf(" ]\n");
- }
-
- /* Get TCP Item */
- cJSON * cj_tcp_item = cJSON_GetObjectItem(cj_items,MR_CJSON_KEY_TCP);
- if (cj_tcp_item != NULL)
- {
- printf("\t\t TCP [");
- /* Get TCP Item Src Port */
- cJSON * cj_tcp_item_src_port = cJSON_GetObjectItem(cj_tcp_item,MR_CJSON_KEY_TCP_SRC_PORT);
- if (cj_tcp_item_src_port != NULL)
- {
- printf(" SrcPort: %u",(uint16_t)cj_tcp_item_src_port->valuedouble);
- }
-
- /* Get TCP Item Src Port Mask */
- cJSON * cj_tcp_item_src_port_mask = cJSON_GetObjectItem(cj_tcp_item,MR_CJSON_KEY_TCP_SRC_PORT_MASK);
- if (cj_tcp_item_src_port_mask != NULL)
- {
- printf(" SrcPortMask: %u",(uint16_t)cj_tcp_item_src_port_mask->valuedouble);
- }
-
- /* Get TCP Item Dst Port */
- cJSON * cj_tcp_item_dst_port = cJSON_GetObjectItem(cj_tcp_item,MR_CJSON_KEY_TCP_DST_PORT);
- if (cj_tcp_item_dst_port != NULL)
- {
- printf(" DstPort: %u",(uint16_t)cj_tcp_item_dst_port->valuedouble);
- }
-
- /* TCP Item Dst Port Mask */
- cJSON * cj_tcp_item_dst_port_mask = cJSON_GetObjectItem(cj_tcp_item,MR_CJSON_KEY_TCP_DST_PORT_MASK);
- if (cj_tcp_item_dst_port_mask != NULL)
- {
- printf(" DstPortMask: %u",(uint16_t)cj_tcp_item_dst_port_mask->valuedouble);
- }
-
- /* Get TCP Item Flags */
- cJSON * cj_tcp_item_flags = cJSON_GetObjectItem(cj_tcp_item,MR_CJSON_KEY_TCP_FLAGS);
- if (cj_tcp_item_flags != NULL)
- {
- printf(" Flags: %u",(uint8_t)cj_tcp_item_flags->valuedouble);
- }
- printf(" ]");
- }
-
- /* Get Vxlan Item */
- cJSON * cj_vxlan_item = cJSON_GetObjectItem(cj_items,MR_CJSON_KEY_VXLAN);
- if (cj_vxlan_item != NULL)
- {
- printf("\t\t Vxlan [");
- /* Get Vxlan Item Arg Flag */
- cJSON * cj_vxlan_item_arg_flag = cJSON_GetObjectItem(cj_vxlan_item,MR_CJSON_KEY_ARG_FLAG);
- if (cj_vxlan_item_arg_flag != NULL)
- {
- printf(" Flags: %u",(uint16_t)cj_vxlan_item_arg_flag->valuedouble);
- }
-
- /* Get Vxlan Item Vni */
- cJSON * cj_vxlan_item_vni = cJSON_GetObjectItem(cj_vxlan_item,MR_CJSON_KEY_VXLAN_VNI);
- if (cj_vxlan_item_vni != NULL)
- {
- printf(" Vni: %u",(uint32_t)cj_vxlan_item_vni->valuedouble);
- }
-
- /* Get Vxlan Item Vni Mask */
- cJSON * cj_vxlan_item_vni_mask = cJSON_GetObjectItem(cj_vxlan_item,MR_CJSON_KEY_VXLAN_VNI_MASK);
- if (cj_vxlan_item_vni_mask != NULL)
- {
- printf(" VniMask: %u",(uint32_t)cj_vxlan_item_vni_mask->valuedouble);
- }
- printf(" ]\n");
- }
- printf("\t\t}\n");
- }
-
- /* Parsing Actions */
- cJSON * cj_actions = cJSON_GetObjectItem(cjson_parse_str,MR_CJSON_KEY_ACTIONS);
- if (cj_actions != NULL)
- {
- printf("\t Actions {\n");
- /* Get Count Action */
- cJSON * cj_action_count = cJSON_GetObjectItem(cj_actions,MR_CJSON_KEY_COUNT);
- if (cj_action_count != NULL)
- {
- printf("\t\t Count [");
- /* Get Count Action Shared */
- cJSON * cj_action_count_shared = cJSON_GetObjectItem(cj_action_count,MR_CJSON_KEY_COUNT_SHARED);
- if (cj_action_count_shared != NULL)
- {
- printf(" Shared");
- }
-
- /* Get Count Action Id */
- cJSON * cj_action_count_id = cJSON_GetObjectItem(cj_action_count,MR_CJSON_KEY_COUNT_ID);
- if (cj_action_count_id != NULL)
- {
- printf(" Count Id: %u",(uint32_t)cj_action_count_id->valuedouble);
- }
- printf(" ]\n");
- }
-
- /* Get Drop Action */
- cJSON * cj_action_drop = cJSON_GetObjectItem(cj_actions,MR_CJSON_KEY_DROP);
- if (cj_action_drop != NULL)
- {
- printf("\t\t Drop []\n");
- }
-
- /* Get Queue Action */
- cJSON * cj_action_queue = cJSON_GetObjectItem(cj_actions,MR_CJSON_KEY_QUEUE);
- if (cj_action_queue != NULL)
- {
- printf("\t\t Queue [");
- /* Get Queue Action Queue Index */
- cJSON * cj_action_queue_index = cJSON_GetObjectItem(cj_action_queue,MR_CJSON_KEY_QUEUE_INDEX);
- if (cj_action_queue_index != NULL)
- {
- printf(" Queue Index: %u",(uint16_t)cj_action_queue_index->valuedouble);
- }
- printf(" ]\n");
- }
-
- /* Get Set Src Mac Action */
- cJSON * cj_action_set_src_mac = cJSON_GetObjectItem(cj_actions,MR_CJSON_KEY_SET_SRC_MAC);
- if (cj_action_set_src_mac != NULL)
- {
- printf("\t\t SetSrcMac [");
- /* Get Set Src Mac Action Smac */
- cJSON * cj_action_set_src_mac_smac = cJSON_GetObjectItem(cj_action_set_src_mac,MR_CJSON_KEY_SET_SRC_MAC_SMAC);
- if (cj_action_set_src_mac_smac != NULL)
- {
- printf(" SrcMac:%s",cj_action_set_src_mac_smac->valuestring);
- }
- printf(" ]\n");
- }
-
- /* Get Set Dst Mac Action */
- cJSON * cj_action_set_dst_mac = cJSON_GetObjectItem(cj_actions,MR_CJSON_KEY_SET_DST_MAC);
- if (cj_action_set_dst_mac != NULL)
- {
- printf("\t\t SetDstMac [");
- /* Get Set Dst Mac Action Dmac */
- cJSON * cj_action_set_dst_mac_dmac = cJSON_GetObjectItem(cj_action_set_dst_mac,MR_CJSON_KEY_SET_DST_MAC_DMAC);
- if (cj_action_set_dst_mac_dmac != NULL)
- {
- printf(" DstMac:%s",cj_action_set_dst_mac_dmac->valuestring);
- }
- printf(" ]\n");
- }
- printf("\t\t}\n");
- }
-
- }
- else
- {
- printf("Flow Rule Json Str Error!\n");
- }
- }
- else
- {
- printf("Parse Flow Rule Str Error!\n");
- }
-
- }
- else if (cjson_flow_rule_end != NULL)
- {
- /* Set Creat Response Enable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- }
- }
- else
- {
- printf("The Flow Rule Search Error.\n");
- }
- return RT_SUCCESS;
-}
-
-/* Flow Delete Response */
-static int __flow_delete_response_handler(struct ctrlmsg_handler * ct_hand, struct ctrlmsg_conn * ct_conn, struct ctrl_msg_header * msg, void * arg)
-{
- cJSON* cjson_error = NULL;
- struct ctrl_msg_flow_response * rep_msg = (struct ctrl_msg_flow_response *)msg;
- struct mrctl_instance * mrctl_instance = (struct mrctl_instance *)arg;
-
- if (rep_msg->msg_err.errcode == RT_SUCCESS)
- {
- printf("The Flow Rule Delete Sucess.\n");
- }
- else
- {
- printf("The Flow Rule Delete Error.\n");
- cjson_error = cJSON_Parse((char *)rep_msg->msg_err.strerr);
- if (cjson_error == NULL)
- {
- printf("Cant Parsing The Error Json Str.\n");
- }
- cJSON * cj_error_info = cJSON_GetObjectItem(cjson_error,MR_CJSON_KEY_ERROR_INFO);
- if (cj_error_info == NULL)
- {
- printf("Cant Parsing The Error Info From Json.\n");
- }
- printf("Reason : %s\n",cj_error_info->valuestring);
- }
-
- /* Set Creat Response Enable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-/* Flow Get Count Response */
-static int __flow_get_count_response_handler(struct ctrlmsg_handler * ct_hand, struct ctrlmsg_conn * ct_conn, struct ctrl_msg_header * msg, void * arg)
-{
- cJSON * cjson_count_response = NULL;
- struct ctrl_msg_flow_response * rep_msg = (struct ctrl_msg_flow_response *)msg;
- struct mrctl_instance * mrctl_instance = (struct mrctl_instance *)arg;
-
- if (rep_msg->msg_err.errcode == RT_SUCCESS)
- {
- /* Parsing Count Json Str */
- cjson_count_response = cJSON_Parse((char *)rep_msg->msg_err.strerr);
- if (cjson_count_response == NULL)
- {
- printf("Cant Parsing The Get Count Success Json Str.\n");
- return RT_ERR;
- }
-
- /* Parsing Success Info Str */
- cJSON * cjson_count_success = cJSON_GetObjectItem(cjson_count_response,MR_CJSON_KEY_SUCCESS_INFO);
- if (cjson_count_success == NULL)
- {
- printf("Cant Get The Get Count Success Info.\n");
- return RT_ERR;
- }
-
- /* Parsing Success Info */
- cJSON * cjson_count_success_info = cJSON_Parse((char *)cjson_count_success->valuestring);
- if (cjson_count_success_info == NULL)
- {
- printf("Cant Parsing The Get Count Success Info.\n");
- return RT_ERR;
- }
-
- /* Parsing Count */
- cJSON * cj_count = cJSON_GetObjectItem(cjson_count_success_info,MR_CJSON_KEY_COUNT);
- if (cj_count != NULL)
- {
- /* Parsing RuleId */
- cJSON * cj_rule_id = cJSON_GetObjectItem(cj_count,MR_CJSON_KEY_COUNT_RULE_ID);
- if (cj_rule_id != NULL)
- {
- printf("RuleId: %u",(u_int32_t)cj_rule_id->valuedouble);
- }
-
- /* Parsing Hits */
- cJSON * cj_hits = cJSON_GetObjectItem(cj_count,MR_CJSON_KEY_COUNT_HITS);
- if (cj_hits != NULL)
- {
- printf(" Hits: %lu",(uint64_t)cj_hits->valuedouble);
- }
- printf("\n");
- }
-
- /* Parsing End */
- cJSON * cj_count_end = cJSON_GetObjectItem(cjson_count_success_info,MR_CJSON_KEY_RULE_END);
- if (cj_count_end != NULL)
- {
- /* Set Creat Response Enable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- }
- }
- else
- {
- printf("The Get Flow Rule Count Error.\n");
- printf("%s\n",(char *)rep_msg->msg_err.strerr);
- cjson_count_response = cJSON_Parse((char *)rep_msg->msg_err.strerr);
- if (cjson_count_response == NULL)
- {
- printf("Cant Parsing The Get Count Error Json Str.\n");
- return RT_ERR;
- }
- cJSON * cj_error_info = cJSON_GetObjectItem(cjson_count_response,MR_CJSON_KEY_ERROR_INFO);
- if (cj_error_info == NULL)
- {
- printf("Cant Parsing The Error Info From Json.\n");
- return RT_ERR;
- }
- printf("Reason : %s\n",cj_error_info->valuestring);
- if (rule_global->get_count.arg_flag & MR_RULE_FLOW_GET_RULE_COUNT_ARG_RULE_ID)
- {
- /* Set Creat Response Enable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_ENABLE, __ATOMIC_SEQ_CST);
- }
- }
- return RT_SUCCESS;
-}
-
-/* Send Create Request Msg */
-int send_create_request_msg(struct mrctl_instance * instance, struct mrctl_flow_rule * rule_item)
-{
- cJSON *cjson_rule = NULL,*cjson_attr = NULL;
- cJSON *cjson_item = NULL,*cjson_ether_item = NULL,*cjson_ipv4_item = NULL,*cjson_udp_item = NULL,*cjson_tcp_item = NULL,*cjson_vxlan_item = NULL;
- cJSON *cjson_action = NULL,*cjson_action_count = NULL,*cjson_action_drop = NULL,*cjson_action_queue = NULL,*cjson_action_set_src_mac = NULL,*cjson_action_set_dst_mac = NULL;
- struct ctrl_msg_flow_request req_msg;
-
- memset(&req_msg, 0, sizeof(req_msg));
- ctrl_msg_header_construct(&req_msg.msg_header, sizeof(req_msg), CTRL_MSG_TYPE_REQUEST, CTRLMSG_TOPIC_FLOW_CREATE);
-
- cjson_rule = cJSON_CreateObject();
- cjson_attr = cJSON_CreateObject();
- cjson_item = cJSON_CreateObject();
- cjson_ether_item = cJSON_CreateObject();
- cjson_ipv4_item = cJSON_CreateObject();
- cjson_udp_item = cJSON_CreateObject();
- cjson_tcp_item = cJSON_CreateObject();
- cjson_vxlan_item = cJSON_CreateObject();
- cjson_action = cJSON_CreateObject();
- cjson_action_count = cJSON_CreateObject();
- cjson_action_drop = cJSON_CreateObject();
- cjson_action_queue = cJSON_CreateObject();
- cjson_action_set_src_mac = cJSON_CreateObject();
- cjson_action_set_dst_mac = cJSON_CreateObject();
-
- /* Port Name */
- cJSON_AddStringToObject(cjson_rule, MR_CJSON_KEY_PORT_NAME, rule_item->port_name);
- /* Rule Type */
- cJSON_AddNumberToObject(cjson_rule, MR_CJSON_KEY_RULE_TYPE, rule_item->rule_type);
-
- /* Attr */
- cJSON_AddNumberToObject(cjson_attr, MR_CJSON_KEY_ARG_FLAG, rule_item->attrs.arg_flag);
-
- if(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_GROUP_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_attr, MR_CJSON_KEY_ATTR_GROUP, rule_item->attrs.attr.group);
- }
-
- if(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_PRIORITY_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_attr, MR_CJSON_KEY_ATTR_PRIORITY, rule_item->attrs.attr.priority);
- }
-
- if(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_INGRESS_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_attr, MR_CJSON_KEY_ATTR_INGRESS, MR_RULE_ARG_ENABLE);
- }
- if(rule_item->attrs.arg_flag & MR_RULE_FLOW_ATTR_ARG_EGRESS_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_attr, MR_CJSON_KEY_ATTR_EGRESS, MR_RULE_ARG_ENABLE);
- }
-
- cJSON_AddItemToObject(cjson_rule,MR_CJSON_KEY_ATTR,cjson_attr);
-
- /* Item */
- cJSON_AddNumberToObject(cjson_item, MR_CJSON_KEY_ITEM_LIST, rule_item->item_list);
- cJSON_AddNumberToObject(cjson_item, MR_CJSON_KEY_ITEM_NUM, rule_item->item_num);
- /* Ether Item */
- if(rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_ETHER)
- {
- struct mr_flow_item_ether * ether_item = &rule_item->items[MR_RULE_FLOW_ITEM_ETHER].ether_item;
-
- cJSON_AddNumberToObject(cjson_ether_item, MR_CJSON_KEY_ARG_FLAG, ether_item->arg_flag);
- if(ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_HAS_VLAN_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_HASVLAN, ether_item->has_vlan);
- }
-
- if (ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_SMAC_ENABLE)
- {
- char mac_addr[MR_RULE_MAC_ADDR_LEN];
-
-#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.src_addr);
-#else
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.s_addr);
-#endif
- cJSON_AddStringToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_SMAC, mac_addr);
- }
-
- if (ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_DMAC_ENABLE)
- {
- char mac_addr[MR_RULE_MAC_ADDR_LEN];
-
-#if RTE_VERSION_NUM(21,11,0,0) <= RTE_VERSION
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.dst_addr);
-#else
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.d_addr);
-#endif
-
- cJSON_AddStringToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_DMAC, mac_addr);
- }
-
- if (ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_SMAC_MASK_ENABLE)
- {
- char mac_mask[MR_RULE_MAC_ADDR_LEN];
- ether_format_addr(mac_mask, sizeof(mac_mask), &ether_item->smac_mask);
- cJSON_AddStringToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_SMAC_MASK, mac_mask);
- }
-
- if (ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_DMAC_MASK_ENABLE)
- {
- char mac_mask[MR_RULE_MAC_ADDR_LEN];
- ether_format_addr(mac_mask, sizeof(mac_mask), &ether_item->dmac_mask);
- cJSON_AddStringToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_DMAC_MASK, mac_mask);
- }
-
- if (ether_item->arg_flag & MR_RULE_FLOW_ETHER_ARG_TYPE_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ether_item, MR_CJSON_KEY_ETHER_TYPE, ether_item->ether_hdr.ether_type);
- }
-
- cJSON_AddItemToObject(cjson_item,MR_CJSON_KEY_ETHER,cjson_ether_item);
- }
-
- /* ipv4 Item */
- if (rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_IPV4)
- {
- struct mr_flow_item_ipv4 * ipv4_item = &rule_item->items[MR_RULE_FLOW_ITEM_IPV4].ipv4_item;
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_ARG_FLAG, ipv4_item->arg_flag);
-
- if(ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_TOS_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_TOS, ipv4_item->ipv4_hdr.type_of_service);
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_FRAGMENT_OFFSET_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_FRAGMENT_OFFSET, ipv4_item->ipv4_hdr.fragment_offset);
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_TTL_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_TTL, ipv4_item->ipv4_hdr.time_to_live);
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_NEXT_PROTO_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_NEXT_PROTO, ipv4_item->ipv4_hdr.next_proto_id);
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_SADDR_ENABLE)
- {
- struct in_addr saddr;
- saddr.s_addr = ipv4_item->ipv4_hdr.src_addr;
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_SADDR, ipv4_item->ipv4_hdr.src_addr);
- cJSON_AddStringToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_SADDR_STR, inet_ntoa(saddr));
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_SADDR_MASK_ENABLE)
- {
- struct in_addr saddr;
- saddr.s_addr = ipv4_item->ip_mask.src_addr;
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_SADDR_MASK, ipv4_item->ip_mask.src_addr);
- cJSON_AddStringToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_SADDR_MASK_STR, inet_ntoa(saddr));
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_DADDR_ENABLE)
- {
- struct in_addr daddr;
- daddr.s_addr = ipv4_item->ipv4_hdr.dst_addr;
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_DADDR, ipv4_item->ipv4_hdr.dst_addr);
- cJSON_AddStringToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_DADDR_STR, inet_ntoa(daddr));
- }
-
- if (ipv4_item->arg_flag & MR_RULE_FLOW_IPV4_ARG_DADDR_MASK_ENABLE)
- {
- struct in_addr daddr;
- daddr.s_addr = ipv4_item->ip_mask.dst_addr;
- cJSON_AddNumberToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_DADDR_MASK, ipv4_item->ip_mask.dst_addr);
- cJSON_AddStringToObject(cjson_ipv4_item, MR_CJSON_KEY_IPV4_DADDR_MASK_STR, inet_ntoa(daddr));
- }
- cJSON_AddItemToObject(cjson_item,MR_CJSON_KEY_IPV4,cjson_ipv4_item);
- }
-
- /* UDP Item */
- if (rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_UDP)
- {
- struct mr_flow_item_udp * udp_item = &rule_item->items[MR_RULE_FLOW_ITEM_UDP].udp_item;
- cJSON_AddNumberToObject(cjson_udp_item, MR_CJSON_KEY_ARG_FLAG, udp_item->arg_flag);
-
- if(udp_item->arg_flag & MR_RULE_FLOW_UDP_ARG_SRC_PORT_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_udp_item, MR_CJSON_KEY_UDP_SRC_PORT, udp_item->udp_hdr.src_port);
- }
-
- if(udp_item->arg_flag & MR_RULE_FLOW_UDP_ARG_SRC_PORT_MASK_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_udp_item, MR_CJSON_KEY_UDP_SRC_PORT_MASK, udp_item->udp_mask.src_port);
- }
-
- if(udp_item->arg_flag & MR_RULE_FLOW_UDP_ARG_DST_PORT_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_udp_item, MR_CJSON_KEY_UDP_DST_PORT, udp_item->udp_hdr.dst_port);
- }
-
- if(udp_item->arg_flag & MR_RULE_FLOW_UDP_ARG_DST_PORT_MASK_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_udp_item, MR_CJSON_KEY_UDP_DST_PORT_MASK, udp_item->udp_mask.dst_port);
- }
-
- cJSON_AddItemToObject(cjson_item,MR_CJSON_KEY_UDP,cjson_udp_item);
- }
-
- /* TCP Item */
- if (rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_TCP)
- {
- struct mr_flow_item_tcp * tcp_item = &rule_item->items[MR_RULE_FLOW_ITEM_TCP].tcp_item;
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_ARG_FLAG, tcp_item->arg_flag);
-
- if(tcp_item->arg_flag & MR_RULE_FLOW_TCP_ARG_SRC_PORT_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_TCP_SRC_PORT, tcp_item->tcp_hdr.src_port);
- }
-
- if(tcp_item->arg_flag & MR_RULE_FLOW_TCP_ARG_SRC_PORT_MASK_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_TCP_SRC_PORT_MASK, tcp_item->tcp_mask.src_port);
- }
-
- if(tcp_item->arg_flag & MR_RULE_FLOW_TCP_ARG_DST_PORT_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_TCP_DST_PORT, tcp_item->tcp_hdr.dst_port);
- }
-
- if(tcp_item->arg_flag & MR_RULE_FLOW_TCP_ARG_DST_PORT_MASK_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_TCP_DST_PORT_MASK, tcp_item->tcp_mask.dst_port);
- }
-
- if(tcp_item->arg_flag & MR_RULE_FLOW_TCP_ARG_FLAGS_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_tcp_item, MR_CJSON_KEY_TCP_FLAGS, tcp_item->tcp_hdr.tcp_flags);
- }
-
- cJSON_AddItemToObject(cjson_item,MR_CJSON_KEY_TCP,cjson_tcp_item);
- }
-
- /* VXLAN Item */
- if (rule_item->item_list & MR_RULE_FLOW_ITEM_LIST_VXLAN)
- {
-
- struct mr_flow_item_vxlan * vxlan_item = &rule_item->items[MR_RULE_FLOW_ITEM_VXLAN].vxlan_item;
- cJSON_AddNumberToObject(cjson_vxlan_item, MR_CJSON_KEY_ARG_FLAG, vxlan_item->arg_flag);
-
- if(vxlan_item->arg_flag & MR_RULE_FLOW_VXLAN_ARG_VNI_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_vxlan_item, MR_CJSON_KEY_VXLAN_VNI, vxlan_item->vni);
- }
-
- if(vxlan_item->arg_flag & MR_RULE_FLOW_VXLAN_ARG_VNI_MASK_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_vxlan_item, MR_CJSON_KEY_VXLAN_VNI_MASK, vxlan_item->vni_mask);
- }
- cJSON_AddItemToObject(cjson_item,MR_CJSON_KEY_VXLAN,cjson_vxlan_item);
- }
-
- cJSON_AddItemToObject(cjson_rule,MR_CJSON_KEY_ITEMS,cjson_item);
-
- /* Action */
- cJSON_AddNumberToObject(cjson_action, MR_CJSON_KEY_ACTION_LIST, rule_item->action_list);
- cJSON_AddNumberToObject(cjson_action, MR_CJSON_KEY_ACTION_NUM, rule_item->action_num);
- /* Action Count */
- if (rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_COUNT)
- {
- struct mr_flow_action_count * count_action = &rule_item->actions[MR_RULE_FLOW_ACTION_COUNT].count;
- cJSON_AddNumberToObject(cjson_action_count, MR_CJSON_KEY_ARG_FLAG, count_action->arg_flag);
- if (count_action->arg_flag & MR_RULE_FLOW_COUNT_ARG_SHARED_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_action_count, MR_CJSON_KEY_COUNT_SHARED, count_action->shared);
- }
- else
- {
- /* default disable */
- cJSON_AddNumberToObject(cjson_action_count, MR_CJSON_KEY_COUNT_SHARED, MR_RULE_ARG_DISABLE);
- }
-
- if (count_action->arg_flag & MR_RULE_FLOW_COUNT_ARG_ID_ENABLE)
- {
- cJSON_AddNumberToObject(cjson_action_count, MR_CJSON_KEY_COUNT_ID, count_action->id);
- }
- cJSON_AddItemToObject(cjson_action,MR_CJSON_KEY_COUNT,cjson_action_count);
- }
-
- /* Action Drop */
- if (rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_DROP)
- {
- cJSON_AddStringToObject(cjson_action_drop, MR_CJSON_KEY_STATE, "enable");
- cJSON_AddItemToObject(cjson_action,MR_CJSON_KEY_DROP,cjson_action_drop);
- }
-
- /* Action Queue */
- if (rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_QUEUE)
- {
- struct mr_flow_action_queue * queue_action = &rule_item->actions[MR_RULE_FLOW_ACTION_QUEUE].queue;
- cJSON_AddNumberToObject(cjson_action_queue, MR_CJSON_KEY_ARG_FLAG, queue_action->arg_flag);
-
- if (queue_action->arg_flag & MR_RULE_FLOW_QUEUE_ARG_QUEUE_INDEX)
- {
- cJSON_AddNumberToObject(cjson_action_queue, MR_CJSON_KEY_QUEUE_INDEX, queue_action->index);
- }
- cJSON_AddItemToObject(cjson_action,MR_CJSON_KEY_QUEUE,cjson_action_queue);
- }
-
- /* Action Set Src Mac */
- if (rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_SET_SRC_MAC)
- {
- struct mr_flow_action_set_mac * set_src_mac_action = &rule_item->actions[MR_RULE_FLOW_ACTION_SET_SRC_MAC].set_src_mac;
- cJSON_AddNumberToObject(cjson_action_set_src_mac, MR_CJSON_KEY_ARG_FLAG, set_src_mac_action->arg_flag);
-
- if (set_src_mac_action->arg_flag & MR_RULE_FLOW_SET_SRC_MAC_ARG_SMAC_ENABLE)
- {
- char mac_addr[MR_RULE_MAC_ADDR_LEN];
- ether_format_addr(mac_addr, sizeof(mac_addr), &set_src_mac_action->mac_addr);
- cJSON_AddStringToObject(cjson_action_set_src_mac, MR_CJSON_KEY_SET_SRC_MAC_SMAC, mac_addr);
- }
- cJSON_AddItemToObject(cjson_action,MR_CJSON_KEY_SET_SRC_MAC,cjson_action_set_src_mac);
- }
-
- /* Action Set Dst Mac */
- if (rule_item->action_list & MR_RULE_FLOW_ACTION_LIST_SET_DST_MAC)
- {
- struct mr_flow_action_set_mac * set_dst_mac_action = &rule_item->actions[MR_RULE_FLOW_ACTION_SET_DST_MAC].set_dst_mac;
- cJSON_AddNumberToObject(cjson_action_set_dst_mac, MR_CJSON_KEY_ARG_FLAG, set_dst_mac_action->arg_flag);
-
- if (set_dst_mac_action->arg_flag & MR_RULE_FLOW_SET_DST_MAC_ARG_DMAC_ENABLE)
- {
- char mac_addr[MR_RULE_MAC_ADDR_LEN];
- ether_format_addr(mac_addr, sizeof(mac_addr), &set_dst_mac_action->mac_addr);
- cJSON_AddStringToObject(cjson_action_set_dst_mac, MR_CJSON_KEY_SET_DST_MAC_DMAC, mac_addr);
- }
- cJSON_AddItemToObject(cjson_action,MR_CJSON_KEY_SET_DST_MAC,cjson_action_set_dst_mac);
- }
-
- /* Action Item End */
- cJSON_AddItemToObject(cjson_rule,MR_CJSON_KEY_ACTIONS,cjson_action);
-
- char * str_rule = cJSON_Print(cjson_rule);
- snprintf((char *)req_msg.cmd, sizeof(req_msg.cmd), "%s", str_rule);
- /* send req */
- ctrlmsg_msg_send(instance->ctrlmsg_handler, NULL, (struct ctrl_msg_header*)&req_msg);
-
- /* Set Creat Response Disable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-/* Send Delete Request Msg */
-int send_delete_request_msg(struct mrctl_instance * instance, struct mrctl_flow_rule * rule_item)
-{
- cJSON *cjson_rule = NULL,* delete_rule = NULL;
- struct ctrl_msg_flow_request req_msg;
-
- cjson_rule = cJSON_CreateObject();
- delete_rule = cJSON_CreateObject();
-
- memset(&req_msg, 0, sizeof(req_msg));
- ctrl_msg_header_construct(&req_msg.msg_header, sizeof(req_msg), CTRL_MSG_TYPE_REQUEST, CTRLMSG_TOPIC_FLOW_DELETE);
-
- cJSON_AddNumberToObject(delete_rule, MR_CJSON_KEY_ARG_FLAG, rule_item->delete.arg_flag);
- if (rule_item->delete.arg_flag & MR_RULE_FLOW_DELETE_ARG_RULE_ID)
- {
- cJSON_AddNumberToObject(delete_rule, MR_CJSON_KEY_DELETE_RULE_ID, rule_item->delete.rule_id);
- }
-
- cJSON_AddItemToObject(cjson_rule,MR_CJSON_KEY_DELETE_RULE,delete_rule);
-
- char * str_rule = cJSON_Print(cjson_rule);
- snprintf((char *)req_msg.cmd, sizeof(req_msg.cmd), "%s", str_rule);
- /* send req */
- ctrlmsg_msg_send(instance->ctrlmsg_handler, NULL, (struct ctrl_msg_header*)&req_msg);
- /* Set Response Disable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-/* Send Get Rule Count Request Msg */
-int send_get_count_request_msg(struct mrctl_instance * instance, struct mrctl_flow_rule * rule_item)
-{
- cJSON *cjson_rule = NULL,* get_count_rule = NULL;
- struct ctrl_msg_flow_request req_msg;
-
- cjson_rule = cJSON_CreateObject();
- get_count_rule = cJSON_CreateObject();
-
- memset(&req_msg, 0, sizeof(req_msg));
- ctrl_msg_header_construct(&req_msg.msg_header, sizeof(req_msg), CTRL_MSG_TYPE_REQUEST, CTRLMSG_TOPIC_FLOW_GET_COUNT);
-
- cJSON_AddNumberToObject(get_count_rule, MR_CJSON_KEY_ARG_FLAG, rule_item->get_count.arg_flag);
- if (rule_item->get_count.arg_flag & MR_RULE_FLOW_GET_RULE_COUNT_ARG_RULE_ID)
- {
- cJSON_AddNumberToObject(get_count_rule, MR_CJSON_KEY_GET_RULE_COUNT_ID, rule_item->get_count.rule_id);
- }
-
- cJSON_AddItemToObject(cjson_rule,MR_CJSON_KEY_GET_RULE_COUNT_RULE,get_count_rule);
-
- char * str_rule = cJSON_Print(cjson_rule);
- snprintf((char *)req_msg.cmd, sizeof(req_msg.cmd), "%s", str_rule);
- /* send req */
- ctrlmsg_msg_send(instance->ctrlmsg_handler, NULL, (struct ctrl_msg_header*)&req_msg);
- /* Set Response Disable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- return RT_SUCCESS;
-}
-
-int main(int argc, char * argv[])
-{
- int opt = 0,close_delay = 0;
- struct mrctl_flow_rule rule_item;
- struct mr_flow_item_ether * ether_item = NULL;
- struct mr_flow_item_ipv4 * ipv4_item = NULL;
- struct mr_flow_item_udp * udp_item = NULL;
- struct mr_flow_item_tcp * tcp_item = NULL;
- struct mr_flow_item_vxlan * vxlan_item = NULL;
- struct mr_flow_action_count * count_action = NULL;
- struct mr_flow_action_queue * queue_action = NULL;
- struct mr_flow_action_set_mac * set_src_mac_action = NULL, * set_dst_mac_action = NULL;
-
- memset(&rule_item, 0, sizeof(rule_item));
- rule_global = &rule_item;
-
- ether_item = &rule_item.items[MR_RULE_FLOW_ITEM_ETHER].ether_item;
- ipv4_item = &rule_item.items[MR_RULE_FLOW_ITEM_IPV4].ipv4_item;
- udp_item = &rule_item.items[MR_RULE_FLOW_ITEM_UDP].udp_item;
- tcp_item = &rule_item.items[MR_RULE_FLOW_ITEM_TCP].tcp_item;
- vxlan_item = &rule_item.items[MR_RULE_FLOW_ITEM_VXLAN].vxlan_item;
- count_action = &rule_item.actions[MR_RULE_FLOW_ACTION_COUNT].count;
- queue_action = &rule_item.actions[MR_RULE_FLOW_ACTION_QUEUE].queue;
- set_src_mac_action = &rule_item.actions[MR_RULE_FLOW_ACTION_SET_SRC_MAC].set_src_mac;
- set_dst_mac_action = &rule_item.actions[MR_RULE_FLOW_ACTION_SET_DST_MAC].set_dst_mac;
-
- while ((opt = getopt_long(argc, argv, MR_CLI_ARG_LIST, cli_options, NULL)) != -1)
- {
- char * endptr = NULL;
- char mac_addr[MR_RULE_MAC_ADDR_LEN];
- char mac_mask[MR_RULE_MAC_ADDR_LEN];
- switch (opt)
- {
- case '?':
- case 'h':
- {
- help();
- return 0;
- break;
- }
- case 'c':
- {
- rule_item.rule_flag |= MR_RULE_TYPE_ENABLE;
- rule_item.rule_type = MR_RULE_CREATE;
- break;
- }
- case 'd':
- {
- rule_item.rule_flag |= MR_RULE_TYPE_ENABLE;
- rule_item.rule_type = MR_RULE_DELETE;
- break;
- }
- case MR_CLI_DELETE_RULE_ID:
- {
- rule_item.delete.arg_flag = MR_RULE_FLOW_DELETE_ARG_RULE_ID;
- rule_item.delete.rule_id = (uint8_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_DELETE_ALL:
- {
- rule_item.delete.arg_flag = MR_RULE_FLOW_DELETE_ARG_DELETE_ALL;
- break;
- }
- case MR_CLI_GET_COUNT:
- {
- rule_item.rule_flag |= MR_RULE_TYPE_ENABLE;
- rule_item.rule_type = MR_RULE_GET_RULE_COUNT;
- break;
- }
- case MR_CLI_COUNT_RULE_ID:
- {
- rule_item.get_count.arg_flag = MR_RULE_FLOW_GET_RULE_COUNT_ARG_RULE_ID;
- rule_item.get_count.rule_id = (uint8_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_COUNT_ALL:
- {
- rule_item.get_count.arg_flag = MR_RULE_FLOW_GET_RULE_COUNT_ARG_ALL;
- break;
- }
- case 's':
- {
- rule_item.rule_flag |= MR_RULE_TYPE_ENABLE;
- rule_item.rule_type = MR_RULE_SEARCH;
- break;
- }
- case 'g':
- {
- rule_item.attrs.arg_flag |= MR_RULE_FLOW_ATTR_ARG_GROUP_ENABLE;
- rule_item.attrs.attr.group = strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ATTR_PRIORITY:
- {
- rule_item.attrs.arg_flag |= MR_RULE_FLOW_ATTR_ARG_PRIORITY_ENABLE;
- rule_item.attrs.attr.priority = strtoull(optarg, &endptr, 0);
- break;
- }
- case 'i':
- {
- rule_item.attrs.arg_flag |= MR_RULE_FLOW_ATTR_ARG_INGRESS_ENABLE;
- rule_item.attrs.attr.ingress = MR_RULE_ARG_ENABLE;
- break;
- }
- case 'e':
- {
- rule_item.attrs.arg_flag |= MR_RULE_FLOW_ATTR_ARG_EGRESS_ENABLE;
- rule_item.attrs.attr.egress = MR_RULE_ARG_ENABLE;
- break;
- }
- case 'p':
- {
- rule_item.attrs.arg_flag |= MR_RULE_FLOW_ATTR_ARG_PORTNAME_ENABLE;
- snprintf(rule_item.port_name, sizeof(rule_item.port_name), "%s", optarg);
- break;
- }
-
- /* Ether Item */
- case MR_CLI_ITEM_ETHER:
- {
- rule_item.rule_flag |= MR_RULE_ITEM_ENABLE;
- rule_item.item_list |= MR_RULE_FLOW_ITEM_LIST_ETHER;
- rule_item.item_num ++;
- break;
- }
- case MR_CLI_ITEM_ETHER_SMAC:
- {
-#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
- if(string_to_mac(optarg,&ether_item->ether_hdr.src_addr) == RT_SUCCESS)
-#else
- if(string_to_mac(optarg,&ether_item->ether_hdr.s_addr) == RT_SUCCESS)
-#endif
-
- {
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_SMAC_ENABLE;
-
-#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.src_addr);
-#else
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.s_addr);
-#endif
- }
- else
- {
- printf("Bad MAC Address format: %s \n",mac_addr);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_ETHER_DMAC:
- {
-#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
- if(string_to_mac(optarg,&ether_item->ether_hdr.dst_addr) == RT_SUCCESS)
-#else
- if(string_to_mac(optarg,&ether_item->ether_hdr.d_addr) == RT_SUCCESS)
-#endif
-
- {
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_DMAC_ENABLE;
-#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.dst_addr);
-#else
- ether_format_addr(mac_addr, sizeof(mac_addr), &ether_item->ether_hdr.d_addr);
-#endif
- }
- else
- {
- printf("Bad MAC Address format: %s \n",mac_addr);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_ETHER_SMAC_MASK:
- {
- if(string_to_mac(optarg,&ether_item->smac_mask) == RT_SUCCESS)
- {
-
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_SMAC_MASK_ENABLE;
- ether_format_addr(mac_mask, sizeof(mac_mask), &ether_item->smac_mask);
- }
- else
- {
- printf("Bad MAC Mask format: %s \n",mac_mask);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_ETHER_DMAC_MASK:
- {
- if(string_to_mac(optarg,&ether_item->dmac_mask) == RT_SUCCESS)
- {
-
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_DMAC_MASK_ENABLE;
- ether_format_addr(mac_mask, sizeof(mac_mask), &ether_item->dmac_mask);
- }
- else
- {
- printf("Bad MAC Mask format: %s \n",mac_mask);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_ETHER_TYPE:
- {
- if(strcmp(optarg, "ipv4") == 0)
- {
- ether_item->ether_hdr.ether_type = RTE_ETHER_TYPE_IPV4;
- }
- else if(strcmp(optarg, "ipv6") == 0)
- {
- ether_item->ether_hdr.ether_type = RTE_ETHER_TYPE_IPV6;
- }
- else if(strcmp(optarg, "vlan") == 0)
- {
- ether_item->ether_hdr.ether_type = RTE_ETHER_TYPE_VLAN;
- }
- else
- {
- fprintf(stderr, "Eth Type Only Support : ipv4 ipv6");
- return 0;
- }
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_TYPE_ENABLE;
- break;
- }
- case MR_CLI_ITEM_ETHER_HAS_VLAN:
- {
- ether_item->has_vlan = MR_RULE_ARG_ENABLE;
- ether_item->arg_flag |= MR_RULE_FLOW_ETHER_ARG_HAS_VLAN_ENABLE;
- break;
- }
-
- /* Ipv4 Item */
- case MR_CLI_ITEM_IPV4:
- {
- rule_item.rule_flag |= MR_RULE_ITEM_ENABLE;
- rule_item.item_list |= MR_RULE_FLOW_ITEM_LIST_IPV4;
- rule_item.item_num ++;
- break;
- }
- case MR_CLI_ITEM_IPV4_TOS:
- {
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_TOS_ENABLE;
- ipv4_item->ipv4_hdr.type_of_service = (uint8_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_IPV4_FRAGMENT_OFFSET:
- {
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_FRAGMENT_OFFSET_ENABLE;
- ipv4_item->ipv4_hdr.fragment_offset = (rte_be16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_IPV4_TTL:
- {
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_TTL_ENABLE;
- ipv4_item->ipv4_hdr.time_to_live = (uint8_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_IPV4_PROTO:
- {
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_NEXT_PROTO_ENABLE;
- if(strcmp(optarg, "tcp") == 0)
- {
- ipv4_item->ipv4_hdr.next_proto_id = IPPROTO_TCP;
- }
- else if(strcmp(optarg, "udp") == 0)
- {
- ipv4_item->ipv4_hdr.next_proto_id = IPPROTO_UDP;
- }
- else
- {
- fprintf(stderr, "Ipv4 Type Only Support 'tcp' 'udp',Not Support : %s \n",optarg);
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_IPV4_SRC:
- {
- struct in_addr src_addr;
- if (inet_pton(AF_INET, optarg, (void *)&src_addr))
- {
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_SADDR_ENABLE;
- ipv4_item->ipv4_hdr.src_addr = src_addr.s_addr;
-
- }
- else
- {
- printf("Plaese Check Ipv4 Saddr: %s \n",optarg);
- printf("Use like: 192.168.1.100\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_IPV4_SRC_MASK:
- {
- struct in_addr src_addr_mask;
- if (inet_pton(AF_INET, optarg, (void *)&src_addr_mask))
- {
- ipv4_item->ip_mask.src_addr = src_addr_mask.s_addr;
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_SADDR_MASK_ENABLE;
- }
- else
- {
- printf("Plaese Check Ipv4 Saddr Mask: %s \n",optarg);
- printf("Use like: 255.255.255.255\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_IPV4_DST:
- {
- struct in_addr dst_addr;
- if (inet_pton(AF_INET, optarg, (void *)&dst_addr))
- {
- ipv4_item->ipv4_hdr.dst_addr = dst_addr.s_addr;
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_DADDR_ENABLE;
- }
- else
- {
- printf("Plaese Check Ipv4 Daddr: %s \n",optarg);
- printf("Use like: 192.168.1.100\n");
- return 0;
- }
- break;
- }
- case MR_CLI_ITEM_IPV4_DST_MASK:
- {
- struct in_addr dst_addr_mask;
- if (inet_pton(AF_INET, optarg, (void *)&dst_addr_mask))
- {
- ipv4_item->ip_mask.dst_addr = dst_addr_mask.s_addr;
- ipv4_item->arg_flag |= MR_RULE_FLOW_IPV4_ARG_DADDR_MASK_ENABLE;
- }
- else
- {
- printf("Plaese Check Ipv4 Daddr Mask: %s \n",optarg);
- printf("Use like: 255.255.255.255\n");
- return 0;
- }
- break;
- }
-
- /* Udp Item */
- case MR_CLI_ITEM_UDP:
- {
- rule_item.rule_flag |= MR_RULE_ITEM_ENABLE;
- rule_item.item_list |= MR_RULE_FLOW_ITEM_LIST_UDP;
- rule_item.item_num ++;
- break;
- }
- case MR_CLI_ITEM_UDP_SRC_PORT:
- {
- udp_item->arg_flag |= MR_RULE_FLOW_UDP_ARG_SRC_PORT_ENABLE;
- udp_item->udp_hdr.src_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_UDP_SRC_PORT_MASK:
- {
- udp_item->arg_flag |= MR_RULE_FLOW_UDP_ARG_SRC_PORT_MASK_ENABLE;
- udp_item->udp_mask.src_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_UDP_DST_PORT:
- {
- udp_item->arg_flag |= MR_RULE_FLOW_UDP_ARG_DST_PORT_ENABLE;
- udp_item->udp_hdr.dst_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_UDP_DST_PORT_MASK:
- {
- udp_item->arg_flag |= MR_RULE_FLOW_UDP_ARG_DST_PORT_MASK_ENABLE;
- udp_item->udp_mask.dst_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
-
- /* TCP Item */
- case MR_CLI_ITEM_TCP:
- {
- rule_item.rule_flag |= MR_RULE_ITEM_ENABLE;
- rule_item.item_list |= MR_RULE_FLOW_ITEM_LIST_TCP;
- rule_item.item_num ++;
- break;
- }
- case MR_CLI_ITEM_TCP_SRC_PORT:
- {
- tcp_item->arg_flag |= MR_RULE_FLOW_TCP_ARG_SRC_PORT_ENABLE;
- tcp_item->tcp_hdr.src_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_TCP_SRC_PORT_MASK:
- {
- tcp_item->arg_flag |= MR_RULE_FLOW_TCP_ARG_SRC_PORT_MASK_ENABLE;
- tcp_item->tcp_mask.src_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_TCP_DST_PORT:
- {
- tcp_item->arg_flag |= MR_RULE_FLOW_TCP_ARG_DST_PORT_ENABLE;
- tcp_item->tcp_hdr.dst_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_TCP_DST_PORT_MASK:
- {
- tcp_item->arg_flag |= MR_RULE_FLOW_TCP_ARG_DST_PORT_MASK_ENABLE;
- tcp_item->tcp_mask.dst_port = (uint16_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_TCP_FLAGS:
- {
- tcp_item->arg_flag |= MR_RULE_FLOW_TCP_ARG_FLAGS_ENABLE;
- tcp_item->tcp_hdr.tcp_flags = (uint8_t)strtoull(optarg, &endptr, 0);
- break;
- }
-
- /* VXLAN Item */
- case MR_CLI_ITEM_VXLAN:
- {
- rule_item.rule_flag |= MR_RULE_ITEM_ENABLE;
- rule_item.item_list |= MR_RULE_FLOW_ITEM_LIST_VXLAN;
- rule_item.item_num ++;
- break;
- }
- case MR_CLI_ITEM_VXLAN_VNI:
- {
- vxlan_item->arg_flag |= MR_RULE_FLOW_VXLAN_ARG_VNI_ENABLE;
- vxlan_item->vni = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
- case MR_CLI_ITEM_VXLAN_VNI_MASK:
- {
- vxlan_item->arg_flag |= MR_RULE_FLOW_VXLAN_ARG_VNI_MASK_ENABLE;
- vxlan_item->vni_mask = (uint32_t)strtoull(optarg, &endptr, 0);
- break;
- }
-
- /* Action */
- /* Count Action */
- case MR_CLI_ACTION_COUNT:
- {
- rule_item.rule_flag |= MR_RULE_ACTION_ENABLE;
- rule_item.action_list |= MR_RULE_FLOW_ACTION_LIST_COUNT;
- rule_item.action_num ++;
- break;
- }
- case MR_CLI_ACTION_COUNT_SHARED:
- {
- count_action->arg_flag |= MR_RULE_FLOW_COUNT_ARG_SHARED_ENABLE;
- count_action->shared = MR_RULE_ARG_ENABLE;
- break;
- }
- case MR_CLI_ACTION_COUNT_ID:
- {
- count_action->arg_flag |= MR_RULE_FLOW_COUNT_ARG_ID_ENABLE;
- count_action->id = strtoull(optarg, &endptr, 0);
- break;
- }
-
- /* Drop Action */
- case MR_CLI_ACTION_DROP:
- {
- rule_item.rule_flag |= MR_RULE_ACTION_ENABLE;
- rule_item.action_list |= MR_RULE_FLOW_ACTION_LIST_DROP;
- rule_item.action_num ++;
- break;
- }
-
- /* Queue Action */
- case MR_CLI_ACTION_QUEUE:
- {
- rule_item.rule_flag |= MR_RULE_ACTION_ENABLE;
- rule_item.action_list |= MR_RULE_FLOW_ACTION_LIST_QUEUE;
- rule_item.action_num ++;
- break;
- }
- case MR_CLI_ACTION_QUEUE_INDEX:
- {
- queue_action->arg_flag |= MR_RULE_FLOW_QUEUE_ARG_QUEUE_INDEX;
- queue_action->index = strtoull(optarg, &endptr, 0);
- break;
- }
-
- /* Set Src Mac Action */
- case MR_CLI_ACTION_SET_SRC_MAC:
- {
- rule_item.rule_flag |= MR_RULE_ACTION_ENABLE;
- rule_item.action_list |= MR_RULE_FLOW_ACTION_LIST_SET_SRC_MAC;
- rule_item.action_num ++;
- break;
- }
- case MR_CLI_ACTION_SET_SRC_MAC_ARG:
- {
- if(string_to_mac(optarg,&set_src_mac_action->mac_addr) == RT_SUCCESS)
- {
-
- set_src_mac_action->arg_flag |= MR_RULE_FLOW_SET_SRC_MAC_ARG_SMAC_ENABLE;
- ether_format_addr(mac_addr, sizeof(mac_addr), &set_src_mac_action->mac_addr);
- }
- else
- {
- printf("Bad MAC Addr Format: %s \n",mac_addr);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
-
- /* Set Dst Mac Action */
- case MR_CLI_ACTION_SET_DST_MAC:
- {
- rule_item.rule_flag |= MR_RULE_ACTION_ENABLE;
- rule_item.action_list |= MR_RULE_FLOW_ACTION_LIST_SET_DST_MAC;
- rule_item.action_num ++;
- break;
- }
- case MR_CLI_ACTION_SET_DST_MAC_ARG:
- {
- if(string_to_mac(optarg,&set_dst_mac_action->mac_addr) == RT_SUCCESS)
- {
-
- set_dst_mac_action->arg_flag |= MR_RULE_FLOW_SET_DST_MAC_ARG_DMAC_ENABLE;
- ether_format_addr(mac_addr, sizeof(mac_addr), &set_dst_mac_action->mac_addr);
- }
- else
- {
- printf("Bad MAC Addr Format: %s \n",mac_addr);
- printf("Use like: 0a:38:ca:f6:f3:20\n");
- return 0;
- }
- break;
- }
-
-
- default:
- help();
- return 0;
- break;
- }
- }
-
- /* Parametric Check */
- if (rule_check(&rule_item) == RT_ERR)
- {
- return 0;
- }
-
- /* Create instance */
- mrctl_instance = mrctl_create();
- if (mrctl_instance == NULL)
- {
- fprintf(stderr, "MrCtl instance create failed. ");
- return 0;
- }
-
- if (mrctl_ctrlmsg_init(mrctl_instance) != RT_SUCCESS)
- {
- fprintf(stderr, "Ctrlmsg module initialization failed. ");
- return 0;
- }
-
- /* Flow Create Response */
- ctrlmsg_msg_reciver_register(mrctl_instance->ctrlmsg_handler, CTRLMSG_TOPIC_FLOW_CREATE,CTRL_MSG_TYPE_RESPONSE, __flow_create_response_handler, mrctl_instance);
- /* Flow Search Response */
- ctrlmsg_msg_reciver_register(mrctl_instance->ctrlmsg_handler, CTRLMSG_TOPIC_FLOW_SEARCH,CTRL_MSG_TYPE_RESPONSE, __flow_search_response_handler, mrctl_instance);
- /* Flow Delete Response */
- ctrlmsg_msg_reciver_register(mrctl_instance->ctrlmsg_handler, CTRLMSG_TOPIC_FLOW_DELETE,CTRL_MSG_TYPE_RESPONSE, __flow_delete_response_handler, mrctl_instance);
- /* Flow Get Count Response */
- ctrlmsg_msg_reciver_register(mrctl_instance->ctrlmsg_handler, CTRLMSG_TOPIC_FLOW_GET_COUNT,CTRL_MSG_TYPE_RESPONSE, __flow_get_count_response_handler, mrctl_instance);
-
- /* Conn Close */
- ctrlmsg_event_conn_close_register(mrctl_instance->ctrlmsg_handler,__conn_close_handler, mrctl_instance);
-
- /* Create Ctrlmsg Thread */
- if (ctrlmsg_thread_launch(mrctl_instance->ctrlmsg_handler) != RT_SUCCESS)
- {
- fprintf(stderr, "Launch ctrlmsg thread failed. ");
- return 0;
- }
-
- if (rule_item.rule_type == MR_RULE_CREATE)
- {
- /* Send Create Requeset Msg */
- send_create_request_msg(mrctl_instance,&rule_item);
- }
- else if (rule_item.rule_type == MR_RULE_SEARCH)
- {
- struct ctrl_msg_flow_request req_msg;
-
- memset(&req_msg, 0, sizeof(req_msg));
- ctrl_msg_header_construct(&req_msg.msg_header, sizeof(req_msg), CTRL_MSG_TYPE_REQUEST, CTRLMSG_TOPIC_FLOW_SEARCH);
- /* Send Search Requeset Msg */
- ctrlmsg_msg_send(mrctl_instance->ctrlmsg_handler, NULL, (struct ctrl_msg_header*)&req_msg);
- /* Set Response Disable */
- __atomic_exchange_n(&mrctl_instance->response_flag, MR_CLI_RESPONSE_DISABLE, __ATOMIC_SEQ_CST);
- }
- else if (rule_item.rule_type == MR_RULE_DELETE)
- {
- /* Send Delete Requeset Msg */
- send_delete_request_msg(mrctl_instance,&rule_item);
- }
- else if (rule_item.rule_type == MR_RULE_GET_RULE_COUNT)
- {
- /* code */
- send_get_count_request_msg(mrctl_instance,&rule_item);
- }
-
- while (1)
- {
- if(__atomic_load_n(&mrctl_instance->response_flag, __ATOMIC_RELAXED) == MR_CLI_RESPONSE_ENABLE)
- {
- return RT_SUCCESS;
- }
- else if (close_delay >= MR_CLI_CLOSE_DELAY)
- {
- return RT_SUCCESS;
- }
-
- close_delay ++;
- usleep(100000);
- }
- return RT_SUCCESS;
-} \ No newline at end of file
diff --git a/tools/pagstat/CMakeLists.txt b/tools/pagstat/CMakeLists.txt
deleted file mode 100644
index 7a96050..0000000
--- a/tools/pagstat/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-configure_file(pagstat.py pagstat)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/pagstat DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
diff --git a/tools/pagstat/pagstat.py b/tools/pagstat/pagstat.py
deleted file mode 100755
index fc1865f..0000000
--- a/tools/pagstat/pagstat.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/env python2
-
-import argparse
-import json
-import prettytable
-import time
-import sys
-import signal
-import os
-import telegraf
-import socket
-
-TBPS = (1 * 1000 * 1000 * 1000 * 1000)
-GBPS = (1 * 1000 * 1000 * 1000)
-MBPS = (1 * 1000 * 1000)
-KBPS = (1 * 1000)
-
-G_JSON_PATH = '/var/run/mrzcpd/mrmonit.daemon'
-
-TITLE_VECTOR = ['PhyRXFrame','PhyRXBits','PhyRXMissed','PhyRXError',
- 'PhyRXNoBUF','PhyTXFrame','PhyTXBits','PhyTXError',
- 'UsrRXDrops', 'UsrTXDrops']
-
-TITLE_MAP = { 'rx_total_packets' : 'ipackets',
- 'rx_total_bytes' : 'ibytes',
- 'rx_packets' : 'ipackets',
- 'rx_bytes' : 'ibytes',
- 'tx_packets' : 'opackets',
- 'tx_bytes' : 'obytes',
- 'port_dropped' : 'imissed',
- 'rx_dropped' : '',
- 'rx_errors' : 'ierrors'
- }
-
-def locate_vector_by_symbol(vector, symbol):
- return [s for s in vector if s['symbol'] == symbol]
-
-def list_all_phydev(json_fp):
- return [ s['symbol'] for s in json_fp['device']]
-
-def phydev_value_read(json_fp, str_device, str_item):
- phydevs = locate_vector_by_symbol(json_fp['device'], str_device)
- return phydevs[0]['stats']['accumulative'][str_item]
-
-def phydev_speed_read(json_fp, str_device, str_item):
- phydevs = locate_vector_by_symbol(json_fp['device'], str_device)
- return phydevs[0]['stats']['speed'][str_item]
-
-def trans_to_human_readable(value):
- if value > TBPS:
- return value * 1.0 / TBPS, 'T'
- if value > GBPS:
- return value * 1.0 / GBPS, 'G'
- if value > MBPS:
- return value * 1.0 / MBPS, 'M'
- if value > KBPS:
- return value * 1.0 / KBPS, 'K'
-
- return value * 1.0, ' '
-
-def dump_human_table(json_fp, devsym, is_human_number = 0):
-
- print("%16s %16s %16s %16s %16s %16s %16s %16s %16s %16s %16s" %
- ("rx_total_packets", "rx_total_bytes", "rx_packets", "rx_bytes",
- "tx_packets","tx_bytes", "port_dropped", "rx_dropped",
- "rx_errors", "ring_tx_packets", "ring_tx_bytes"))
-
- print("%16u %16u %16u %16u %16u %16u %16u %16u %16u %16u %16u" % (
- phydev_value_read(json_fp, devsym, 'ipackets'), phydev_value_read(json_fp, devsym, 'ibytes') / 8,
- phydev_value_read(json_fp, devsym, 'ipackets'), phydev_value_read(json_fp, devsym, 'ibytes') / 8,
- phydev_value_read(json_fp, devsym, 'opackets'), phydev_value_read(json_fp, devsym, 'obytes') / 8,
- phydev_value_read(json_fp, devsym, 'imissed'), 0, 0, 0, 0))
-
-# APM sendlog format
-def dump_apm_sendlog(json_fp, telegraf_client, devsym):
-
- __metric_dict_speed = {}
- __metric_dict_value = {}
- __tags = {'device' : devsym }
-
- for item in TITLE_VECTOR:
- value = phydev_speed_read(json_fp, devsym, TITLE_MAP[item])
- __metric_dict_speed[item] = value
-
- for item in TITLE_VECTOR:
- value = phydev_value_read(json_fp, devsym, TITLE_MAP[item])
- __metric_dict_value[item] = value
-
- telegraf_client.metric('mr4_device_rxtx_speed', __metric_dict_speed, tags = __tags)
- telegraf_client.metric('mr4_device_rxtx_value', __metric_dict_value, tags = __tags)
- return
-
-def setup_argv_parser(phydev_list):
-
- parser = argparse.ArgumentParser(description='Marsio ZeroCopy Tools -- Monitor NIC devices',
- version = 'Marsio ZeroCopy Tools Suite 4.1')
-
- parser.add_argument('-t', '--time', help = 'interval, seconds to wait between updates',
- type=int, default = 1)
- parser.add_argument('-l', '--loop', help = 'print loop, exit when recv a signal',
- action='store_true', default = 0)
- parser.add_argument('-H', '--human-readable', help = 'print value in human readable format',
- action = 'store_true', default = 0)
- parser.add_argument('-i', '--interface', help = 'the name of network interface',
- action = 'append', choices=phydev_list)
- parser.add_argument('--clear-screen', help = 'clear screen at start of loop',
- action='store_true', default = 0)
-
- # APM sendlog options
- parser.add_argument('--sendlog-apm', help = 'send log to apm server',
- action='store_true', default = 0)
- parser.add_argument('--sendlog-apm-cfg', help = 'send log configure file',
- type=str, default = '/opt/tsg/mrzcpd/etc/mrsendlog.conf')
-
- return parser.parse_args()
-
-def phydev_json_load():
- with open(G_JSON_PATH) as json_fp:
- return json.load(json_fp)
-
-
-def sendlog_hostname(test_hostname, test_port):
- import socket
-
- hostname = socket.gethostname()
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- try:
- s.connect((test_hostname, int(test_port)))
- local_ip_addr = s.getsockname()[0]
- except:
- local_ip_addr = '127.0.0.1'
- finally:
- s.close()
-
- return hostname, local_ip_addr
-
-def sendlog_apm_init(r_option):
- import ConfigParser
- import urllib
-
- config = ConfigParser.ConfigParser()
- config.read(r_option.sendlog_apm_cfg)
-
- apm_server_url = config.get('sendlog_apm', 'apm_device_server')
- url_proto, rest = urllib.splittype(apm_server_url)
- url_host, rest = urllib.splithost(rest)
- url_host, url_port = urllib.splitport(url_host)
-
- hostname, local_ip_addr = sendlog_hostname(url_host, url_port)
- sendlog_tags = {'host' : hostname, 'local_ip_addr': local_ip_addr}
-
- if url_proto == 'udp':
- telegraf_client = telegraf.TelegrafClient(host = url_host,
- port = int(url_port), tags = sendlog_tags)
- elif url_proto == 'http':
- telegraf_client = telegraf.HttpClient(host = url_host,
- port = int(url_port), tags = sendlog_tags)
-
- return telegraf_client
-
-def sigint_handler(handler, frame):
- sys.exit(0)
-
-def main():
- signal.signal(signal.SIGINT, sigint_handler)
-
- try:
- json_fp = phydev_json_load()
- phydev_list = list_all_phydev(json_fp)
- r_option = setup_argv_parser(phydev_list)
-
- if r_option.sendlog_apm:
- telegraf_client = sendlog_apm_init(r_option)
-
- phydev_user_list = phydev_list if r_option.interface is None else r_option.interface
-
- while True:
- if r_option.clear_screen:
- os.system('clear')
-
- json_fp = phydev_json_load()
-
- if r_option.sendlog_apm:
- for devsym in phydev_user_list:
- dump_apm_sendlog(json_fp, telegraf_client, devsym)
- else:
- for devsym in phydev_user_list:
- dump_human_table(json_fp, devsym, r_option.human_readable)
-
- if not r_option.loop:
- break
-
- time.sleep(r_option.time)
-
- except KeyboardInterrupt:
- pass
- except ValueError as err:
- print(("%s, perhaps mrzcpd program is not running.") % str(err))
- except IOError as err:
- print(("%s, perhaps mrzcpd program is not running.") % str(err))
-
- return 0
-
-if __name__ == '__main__':
- main()
diff --git a/tools/script/mrstart b/tools/script/mrstart
deleted file mode 100644
index 55722c0..0000000
--- a/tools/script/mrstart
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/bash
-#
-# marsiod startup marsio zerocopy driver daemon
-#
-# chkconfig: 235 10 10
-# description: marsio zero copy driver
-
-. /etc/rc.d/init.d/functions
-. /etc/mrenv.conf
-
-if [ -z "$DPDK_ROOT" ]; then
- DPDK_ROOT="/opt/iiesoft/dpdk"
-fi
-
-if [ -z "$MARSIO_ROOT" ]; then
- MARSIO_ROOT="/opt/iiesoft/marsio"
-fi
-
-if [ -z "$HUGEPAGE_2M_NUM" ]; then
- HUGEPAGE_NUM_2M=4096
-fi
-
-if [ -z "$PCI_ADDR_IXGBE" ]; then
- PCI_ADDR_IXGBE=""
-fi
-
-if [ -z "$PCI_ADDR_IGB" ]; then
- PCI_ADDR_IGB=""
-fi
-
-MODULE_PATH=$DPDK_ROOT/lib/modules/$(uname -r)/extra/dpdk
-DAEMOH_PATH=$MARSIO_ROOT/bin/
-KNI_MODULE=rte_kni.ko
-UIO_MODULE=igb_uio.ko
-NR_HUGEPAGE_FILE_2M=/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
-NR_HUGEPAGE_FILE_1G=/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
-HUGEPAGE_PATH_2M=/mnt/.huge_2M
-HUGEPAGE_PATH_1G=/mnt/.huge_1G
-
-DAEMON_BASENAME=zcpd
-DAEMON=$DAEMOH_PATH/$DAEMON_BASENAME
-
-cd $DAEMOH_PATH
-
-function kill_app()
-{
- APP_USE_HUGE_2M=$(lsof -t $HUGEPAGE_PATH_2M 2> /dev/null)
- RET1=$?
- APP_USE_HUGE_1G=$(lsof -t $HUGEPAGE_PATH_1G 2> /dev/null)
- RET2=$?
-
- if [ $RET1 -eq 0 -a "$APP_USE_HUGE_2M" != '' ]; then
- kill $APP_USE_HUGE_2M
- fi
- if [ $RET2 -eq 1 -a "$APP_USE_HUGE_1G" != '' ]; then
- kill $APP_USE_HUGE_1G
- fi
- return 0
-}
-
-function check_alive()
-{
- DAEMON_PID=$(pidof $DAEMON_BASENAME)
- if [ "$DAEMON_PID" == "" ]; then
- return 1;
- else
- return 0;
- fi
-}
-
-while [ 1 ]
-do
- if ! check_alive ; then
- kill_app
- nohup $DAEMON > /dev/null 2>&1 &
- fi
- sleep 1
-done \ No newline at end of file
diff --git a/tools/script/mrstop b/tools/script/mrstop
deleted file mode 100644
index 6cadebd..0000000
--- a/tools/script/mrstop
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-#
-# mrstop stop marsio zerocopy driver daemon
-# description: marsio zero copy driver
-
-. /etc/rc.d/init.d/functions
-. /etc/mrenv.conf
-
-HUGEPAGE_PATH_2M=/mnt/.huge_2M
-HUGEPAGE_PATH_1G=/mnt/.huge_1G
-
-DAEMON_BASENAME=zcpd
-DAEMON=$DAEMOH_PATH/$DAEMON_BASENAME
-
-function kill_app()
-{
- APP_USE_HUGE_2M=$(lsof -t $HUGEPAGE_PATH_2M 2>/dev/null)
- RET1=$?
- APP_USE_HUGE_1G=$(lsof -t $HUGEPAGE_PATH_1G 2>/dev/null)
- RET2=$?
-
- if [ $RET1 -eq 0 -a "$APP_USE_HUGE_2M" != "" ]; then
- kill $APP_USE_HUGE_2M
- fi
- if [ $RET2 -eq 0 -a "$APP_USE_HUGE_1G" != "" ]; then
- kill $APP_USE_HUGE_1G
- fi
- return 0
-}
-
-killall mrstart &> /dev/null
-killall mrstart &> /dev/null
-kill_app
-kill_app
-sleep 5
diff --git a/tools/script/mrzcpd b/tools/script/mrzcpd
deleted file mode 100644
index 049dca0..0000000
--- a/tools/script/mrzcpd
+++ /dev/null
@@ -1,287 +0,0 @@
-#!/bin/bash
-#
-# marsiod startup marsio zerocopy driver daemon
-#
-# chkconfig: 235 10 10
-# description: marsio zero copy driver
-
-. /etc/rc.d/init.d/functions
-. /etc/mrenv.conf
-
-if [ -z "$DPDK_ROOT" ]; then
- DPDK_ROOT="/opt/iiesoft/dpdk"
-fi
-
-if [ -z "$MARSIO_ROOT" ]; then
- MARSIO_ROOT="/opt/iiesoft/marsio"
-fi
-
-if [ -z "$HUGEPAGE_NUM_2M" ]; then
- HUGEPAGE_NUM_2M=4096
-fi
-
-if [ -z "$PCI_ADDR_IXGBE" ]; then
- PCI_ADDR_IXGBE=""
-fi
-
-if [ -z "$PCI_ADDR_IGB" ]; then
- PCI_ADDR_IGB=""
-fi
-
-MODULE_PATH=$DPDK_ROOT/lib/modules/$(uname -r)/extra/dpdk
-DAEMOH_PATH=$MARSIO_ROOT/bin/
-KNI_MODULE=rte_kni.ko
-UIO_MODULE=igb_uio.ko
-NR_HUGEPAGE_FILE_2M=/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
-NR_HUGEPAGE_FILE_1G=/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
-HUGEPAGE_PATH_2M=/mnt/.huge_2M
-HUGEPAGE_PATH_1G=/mnt/.huge_1G
-
-# Execuate File path
-DAEMON=$DAEMOH_PATH/zcpd
-NICTOOL=$DPDK_ROOT/sbin/dpdk_nic_bind
-DAEMON_START=$MARSIO_ROOT/bin/mrstart
-DAEMON_STOP=$MARSIO_ROOT/bin/mrstop
-
-function module_unload_uio()
-{
- lsmod | grep -s igb_uio > /dev/null 2>&1
- [ $? -eq 0 ] && rmmod igb_uio > /dev/null 2>&1 || return 0
- [ ! $? -eq 0 ] && return 1
- return 0
-}
-
-function module_unload_kni()
-{
- lsmod | grep -s rte_kni > /dev/null 2>&1
- [ $? -eq 0 ] && rmmod rte_kni > /dev/null 2>&1 || return 0
- [ ! $? -eq 0 ] && return 1
- return 0
-}
-
-function module_load_kni()
-{
- if [ ! -e $MODULE_PATH/$KNI_MODULE ]; then
- echo -n "$KNI_MODULE does not existed. Check DPDK is installed or not. "
- return 1
- fi
-
- module_unload_kni
- insmod $MODULE_PATH/$KNI_MODULE > /dev/null 2>&1
- [ ! $? -eq 0 ] && echo -n "$KNI_MODULE load failure." && return 1
- return 0
-}
-
-function module_load_uio()
-{
- if [ ! -e $MODULE_PATH/$UIO_MODULE ]; then
- echo -n "$UIO_MODULE does not existed. Check DPDK is installed or not. "
- return 1
- fi
-
- module_unload_uio
- modprobe uio &> /dev/null
- insmod $MODULE_PATH/$UIO_MODULE
- [ ! $? -eq 0 ] && echo -n "$UIO_MODULE load failure." && return 1
- return 0
-}
-
-function huge_release_1G()
-{
- cat /proc/mounts | grep "$HUGEPAGE_PATH_1G" > /dev/null
- grep -s "$HUGEPAGE_PATH_1G" /proc/mounts > /dev/null
- if [ $? -eq 0 ]; then
- umount $HUGEPAGE_PATH_1G > /dev/null
- [ ! $? -eq 0 ] && echo "umount 1G hugepage failure, maybe in use" && return 1
- fi
-
- if [ -d $HUGEPAGE_PATH_1G ] ; then
- rm -R $HUGEPAGE_PATH_1G
- [ ! $? $HUGEPAGE_PATH_2M ] && echo "Cannot delete 2M hugepage" && return 1
- fi
- return 0
-}
-
-function huge_release_2M()
-{
- cat /proc/mounts | grep "$HUGEPAGE_PATH_2M" > /dev/null
- grep -s "$HUGEPAGE_PATH_2M" /proc/mounts > /dev/null
- if [ $? -eq 0 ]; then
- umount $HUGEPAGE_PATH_2M > /dev/null
- [ ! $? -eq 0 ] && echo "umount 2M hugepage failure, maybe in use" && return 1
- fi
-
- if [ -d $HUGEPAGE_PATH_2M ] ; then
- rm -R $HUGEPAGE_PATH_2M
- [ ! $? -eq 0 ] && echo "Cannot delete 2M hugepage" && return 1
- fi
-
- if [ -e $NR_HUGEPAGE_FILE_2M ]; then
- echo -n 0 > $NR_HUGEPAGE_FILE_2M
- fi
-
- return 0
-}
-
-function huge_alloc_1G()
-{
- if [ ! -e $NR_HUGEPAGE_FILE_1G ]; then
- return 1
- fi
-
- SIZE_1G=$(cat $NR_HUGEPAGE_FILE_1G)
- if [ ! $SIZE_1G -gt 0 ]; then
- echo -e "\tHugepage 1G has $SIZE_1G nr_hugepages. Please set \"hugepagesz=1G hugepages=4\" in /boot/grub/grub.conf."
- return 1
- fi
-
- mkdir -p $HUGEPAGE_PATH_1G
- mount -t hugetlbfs nodev -o pagesize=1G $HUGEPAGE_PATH_1G
- [ $? -eq 0 ] && return 0
-
- return 1
-}
-
-function huge_alloc_2M()
-{
- if [ ! -e $NR_HUGEPAGE_FILE_2M ]; then
- return 1
- fi
-
- SIZE_2M=$(cat $NR_HUGEPAGE_FILE_2M)
- [ $SIZE_2M -eq 0 ] && echo -n $HUGEPAGE_NUM_2M > $NR_HUGEPAGE_FILE_2M
- mkdir -p $HUGEPAGE_PATH_2M
- mount -t hugetlbfs nodev $HUGEPAGE_PATH_2M
- [ $? -eq 0 ] && return 0
- return 1
-}
-
-function huge_alloc()
-{
- huge_release_1G
- huge_release_2M
- huge_alloc_1G || huge_alloc_2M
- return $?
-}
-
-function huge_release()
-{
- huge_release_1G && huge_release_2M
- return $?
-}
-
-function nic_unbind_ixgbe()
-{
- OLDIFS=$IFS; IFS=,
- for ITER_PCI_ADDR in $PCI_ADDR_IXGBE; do
- $NICTOOL --force -b ixgbe $ITER_PCI_ADDR
- [ ! $? -eq 0 ] && return 1
- done
- IFS=$OLDIFS
- return 0
-}
-
-function nic_unbind_igb()
-{
- OLDIFS=$IFS; IFS=,
- for ITER_PCI_ADDR in $PCI_ADDR_IGB; do
- $NICTOOL --force -b igb $ITER_PCI_ADDR
- [ ! $? -eq 0 ] && return 1
- done
- IFS=$OLDIFS
- return 0
-}
-
-function nic_bind_ixgbe()
-{
- OLDIFS=$IFS; IFS=,
- for ITER_PCI_ADDR in $PCI_ADDR_IXGBE; do
- $NICTOOL --force -b igb_uio $ITER_PCI_ADDR
- [ ! $? -eq 0 ] && return 1
- done
- IFS=$OLDIFS
- return 0
-}
-
-function nic_bind_igb()
-{
- OLDIFS=$IFS; IFS=,
- for ITER_PCI_ADDR in $PCI_ADDR_IGB; do
- $NICTOOL --force -b igb_uio $ITER_PCI_ADDR
- [ ! $? -eq 0 ] && return 1
- done
- IFS=$OLDIFS
- return 0
-}
-
-function marsiod_stop()
-{
- $DAEMON_STOP > /dev/null
- return 0
-}
-
-function marsiod_start()
-{
- echo 0 > /proc/sys/kernel/randomize_va_space
- $DAEMON_START & > /dev/null
- return 0
-}
-
-function start()
-{
- # Require Step, if failure, all step should be stop.
- action $"Loading IGB_UIO Module:" module_load_uio
- [ ! $? -eq 0 ] && return 1
-
-
- action $"Loading Hugepage memory:" huge_alloc
- [ ! $? -eq 0 ] && return 1
- action $"Binding IXGBE NIC Device with IGB_UIO:" nic_bind_ixgbe
- [ ! $? -eq 0 ] && return 1
- action $"Binding IGB NIC Device with IGB_UIO:" nic_bind_igb
- [ ! $? -eq 0 ] && return 1
- action $"Starting Marsio ZC Daemon:" marsiod_start
- [ ! $? -eq 0 ] && return 1
- return 0
-}
-
-function stop()
-{
- action $"Stoping Marsio ZC Daemon:" marsiod_stop
- [ ! $? -eq 0 ] && return 1
- action $"Unloading Hugepage memory:" huge_release
- [ ! $? -eq 0 ] && return 1
- action $"Unbind IXGBE UIO Device:" nic_unbind_ixgbe
- [ ! $? -eq 0 ] && return 1
- action $"Unbind IGB UIO Device:" nic_unbind_igb
- [ ! $? -eq 0 ] && return 1
- action $"Unloading IGB_UIO Module:" module_unload_uio
- [ ! $? -eq 0 ] && return 1
- return 0
-}
-
-function restart()
-{
- stop
- start $*
-}
-
-action=$1
-shift
-
-case $action in
- start)
- start $*
- ;;
- stop)
- stop
- ;;
- restart)
- restart $*
- ;;
- *)
- echo "Usage: service $0 {start|stop|restart}"
- exit 1
-esac
-
-exit $? \ No newline at end of file
diff --git a/tools/tcpdump/CMakeLists.txt b/tools/tcpdump/CMakeLists.txt
index 1d1654f..deb877a 100644
--- a/tools/tcpdump/CMakeLists.txt
+++ b/tools/tcpdump/CMakeLists.txt
@@ -7,11 +7,6 @@ include_directories(${CMAKE_SOURCE_DIR}/include/internal)
include_directories(${CMAKE_SOURCE_DIR}/service/include)
include_directories(${DPDK_INCLUDE_DIR})
-add_executable(mrrxdump tcpdump.c)
-target_include_directories(mrrxdump PRIVATE ${PCAP_INCLUDE_DIR})
-target_link_libraries(mrrxdump marsio infra ${SYSTEMD_LIBRARIES} ${PCAP_LIBRARY})
-install(TARGETS mrrxdump RUNTIME DESTINATION ${MR_INSTALL_BINDIR_RELATIVE_PATH} COMPONENT Program)
-
add_executable(mrpdump pdump.c)
target_include_directories(mrpdump PRIVATE ${PCAP_INCLUDE_DIR})
target_link_libraries(mrpdump marsio infra z elf ${SYSTEMD_LIBRARIES} ${PCAP_LIBRARY} ${DPDK_LIBRARY})