DPDK - CLI 명령 행 모듈
17539 단어 DPDK
글 목록
DPDK App 을 개발 할 때 DPDK 가 제공 하 는 CLI 도 구 를 이용 하여 프로그램 에 명령 행 을 추가 할 수 있 습 니 다.네 부분 으로 구 성 된 명령 을 추가 합 니 다:
명령 줄 초기 화
명령 행 을 초기 화 합 니 다. 명령 행 기능 은 cmd 입 니 다.obj_add_parsed, 명령 행 의 형식 은 tokens 입 니 다.
cmdline_parse_inst_t cmd_obj_add = {
.f = cmd_obj_add_parsed, /* function to call */
.data = NULL, /* 2nd arg of func */
.help_str = "Add an object (name, val)",
.tokens = {
/* token , NULL */
(void *)&cmd_obj_action_add,
(void *)&cmd_obj_name,
(void *)&cmd_obj_ip,
NULL,
},
};
그리고 초기 화 된 명령 줄 을 명령 줄 을 저장 하 는 배열 에 추가 합 니 다. 이 배열 은 모든 명령 줄 의 인 스 턴 스 (정의, 해석 및 기능 포함) 를 저장 하여 NULL 로 끝 냅 니 다.
/* CONTEXT (list of instruction */
cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_obj_add,
NULL,
};
마지막 으로 mian 함수 에서 명령 행 대상 을 만 들 고 콘 솔 과 사용자 의 상호작용 을 통 해 다음 과 같이 구체 적 으로 실현 합 니 다.
// dpdk-18.08/examples/cmdline/main.c
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2014 Intel Corporation.
* Copyright (c) 2009, Olivier MATZ
* All rights reserved.
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "commands.h"
int main(int argc, char **argv)
{
int ret;
struct cmdline *cl;
ret = rte_eal_init(argc, argv);
if (ret < 0)
rte_panic("Cannot init EAL
");
cl = cmdline_stdin_new(main_ctx, "example> ");
if (cl == NULL)
rte_panic("Cannot create cmdline instance
");
cmdline_interact(cl);
cmdline_stdin_exit(cl);
return 0;
}
명령 행 해석
cmdline_parse_token_string_t cmd_obj_action_add =
TOKEN_STRING_INITIALIZER(struct cmd_obj_add_result, action, "add");
cmdline_parse_token_string_t cmd_obj_name =
TOKEN_STRING_INITIALIZER(struct cmd_obj_add_result, name, NULL);
cmdline_parse_token_ipaddr_t cmd_obj_ip =
TOKEN_IPADDR_INITIALIZER(struct cmd_obj_add_result, ip);
명령 행 인자
이 구조 체 는 명령 행 의 매개 변수 목록 을 저장 하 는 데 사 용 됩 니 다:
struct cmd_obj_add_result {
cmdline_fixed_string_t action;
cmdline_fixed_string_t name;
cmdline_ipaddr_t ip;
};
명령 행 기능
어떤 명령 을 실행 하여 구체 적 으로 완 성 된 기능:
static void cmd_obj_add_parsed(void *parsed_result,struct cmdline *cl, __attribute__((unused)) void *data)
{
struct cmd_obj_add_result *res = parsed_result; // ;
struct object *o;
char ip_str[INET6_ADDRSTRLEN];
SLIST_FOREACH(o, &global_obj_list, next) {
if (!strcmp(res->name, o->name)) {
cmdline_printf(cl, "Object %s already exist
", res->name);
return;
}
break;
}
o = malloc(sizeof(*o));
if (!o) {
cmdline_printf(cl, "mem error
");
return;
}
snprintf(o->name, sizeof(o->name), "%s", res->name);
o->ip = res->ip;
SLIST_INSERT_HEAD(&global_obj_list, o, next);
if (o->ip.family == AF_INET)
snprintf(ip_str, sizeof(ip_str), NIPQUAD_FMT,
NIPQUAD(o->ip.addr.ipv4));
else
snprintf(ip_str, sizeof(ip_str), NIP6_FMT,
NIP6(o->ip.addr.ipv6));
cmdline_printf(cl, "Object %s added, ip=%s
",
o->name, ip_str);
}
참고 문서
https://blog.csdn.net/zhang1051546117/article/details/78051240
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DPDK - CLI 명령 행 모듈명령 행 초기 화 명령 행 해석 명령 행 의 인자 명령 행 의 기능 DPDK App 을 개발 할 때 DPDK 가 제공 하 는 CLI 도 구 를 이용 하여 프로그램 에 명령 행 을 추가 할 수 있 습 니 다.네 부분 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.