diff options
| author | songyanchao <[email protected]> | 2023-12-14 02:09:59 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2023-12-14 02:09:59 +0000 |
| commit | d9482ed88d2374b097b35fbd3451a28aefa73eed (patch) | |
| tree | fec0087d4fec6d0febe93dbb9b15cedfce6c94c1 /tools | |
| parent | 052fc5bb8d6765ac20c2f8ce5dda97750d929dcd (diff) | |
🎈 perf(DPISDN-30): Packaging python scripts with nuitka.
Packaging python scripts with nuitka.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | tools/classifier_rule_test/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | tools/classifier_rule_test/classifier_rule_test.c | 375 | ||||
| -rw-r--r-- | tools/dlogreader/CMakeLists.txt | 2 | ||||
| -rwxr-xr-x | tools/dlogreader/dlogreader.py | 164 | ||||
| -rw-r--r-- | tools/lb_rule_test/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | tools/lb_rule_test/lb_rule_test.c | 541 | ||||
| -rw-r--r-- | tools/monit_device/CMakeLists.txt | 13 | ||||
| -rwxr-xr-x | tools/monit_device/monit_device.py | 4 | ||||
| -rw-r--r-- | tools/monit_obp/CMakeLists.txt | 13 | ||||
| -rw-r--r-- | tools/monit_obp/monit_obp.py | 4 | ||||
| -rw-r--r-- | tools/monit_stream/CMakeLists.txt | 13 | ||||
| -rwxr-xr-x | tools/monit_stream/monit_stream.py | 7 | ||||
| -rw-r--r-- | tools/mrctl/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | tools/mrctl/mrctl.c | 2099 | ||||
| -rw-r--r-- | tools/pagstat/CMakeLists.txt | 2 | ||||
| -rwxr-xr-x | tools/pagstat/pagstat.py | 205 | ||||
| -rw-r--r-- | tools/script/mrstart | 78 | ||||
| -rw-r--r-- | tools/script/mrstop | 35 | ||||
| -rw-r--r-- | tools/script/mrzcpd | 287 | ||||
| -rw-r--r-- | tools/tcpdump/CMakeLists.txt | 5 |
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), ðer_item->ether_hdr.src_addr); -#else - ether_format_addr(mac_addr, sizeof(mac_addr), ðer_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), ðer_item->ether_hdr.dst_addr); -#else - ether_format_addr(mac_addr, sizeof(mac_addr), ðer_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), ðer_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), ðer_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,ðer_item->ether_hdr.src_addr) == RT_SUCCESS) -#else - if(string_to_mac(optarg,ðer_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), ðer_item->ether_hdr.src_addr); -#else - ether_format_addr(mac_addr, sizeof(mac_addr), ðer_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,ðer_item->ether_hdr.dst_addr) == RT_SUCCESS) -#else - if(string_to_mac(optarg,ðer_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), ðer_item->ether_hdr.dst_addr); -#else - ether_format_addr(mac_addr, sizeof(mac_addr), ðer_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,ðer_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), ðer_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,ðer_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), ðer_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}) |
