forked from F-Stack/f-stack
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
pengtian
committed
May 14, 2020
1 parent
4b05018
commit 47507c1
Showing
7 changed files
with
253 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# @(#)Makefile 8.1 (Berkeley) 6/6/93 | ||
# $FreeBSD$ | ||
|
||
|
||
TOPDIR?=${CURDIR}/../.. | ||
|
||
PROG=knictl | ||
|
||
include ${TOPDIR}/tools/prog.mk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
#include <unistd.h> | ||
#include <strings.h> | ||
#include "ff_ipc.h" | ||
|
||
void | ||
usage(void) | ||
{ | ||
printf("Usage:\n"); | ||
printf(" knictl [-p <f-stack proc_id>] [-P <max proc_id>] " | ||
"[-a alltokni/alltoff/default][-n]\n use `-a` to set kni action\n use `-n` to show \n"); | ||
} | ||
|
||
enum FF_KNICTL_CMD get_action(const char *c){ | ||
if (!c) | ||
return FF_KNICTL_ACTION_MAX; | ||
if (0 == strcasecmp(c, "alltokni")){ | ||
return FF_KNICTL_ACTION_ALL_TO_KNI; | ||
} else if (0 == strcasecmp(c, "alltoff")){ | ||
return FF_KNICTL_ACTION_ALL_TO_FF; | ||
} else if (0 == strcasecmp(c, "default")){ | ||
return FF_KNICTL_ACTION_DEFAULT; | ||
} else { | ||
return FF_KNICTL_ACTION_MAX; | ||
} | ||
} | ||
|
||
const char * get_action_str(enum FF_KNICTL_CMD cmd){ | ||
switch (cmd) | ||
{ | ||
case FF_KNICTL_ACTION_ALL_TO_KNI: | ||
return "alltokni"; | ||
break; | ||
case FF_KNICTL_ACTION_ALL_TO_FF: | ||
return "alltoff"; | ||
break; | ||
case FF_KNICTL_ACTION_DEFAULT: | ||
return "default"; | ||
break; | ||
default: | ||
return "unknown"; | ||
break; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
|
||
int knictl_status(struct ff_knictl_args *knictl){ | ||
int ret; | ||
struct ff_msg *msg, *retmsg = NULL; | ||
|
||
msg = ff_ipc_msg_alloc(); | ||
if (msg == NULL) { | ||
errno = ENOMEM; | ||
return -1; | ||
} | ||
|
||
msg->msg_type = FF_KNICTL; | ||
msg->knictl = *knictl; | ||
ret = ff_ipc_send(msg); | ||
if (ret < 0) { | ||
errno = EPIPE; | ||
ff_ipc_msg_free(msg); | ||
return -1; | ||
} | ||
|
||
do { | ||
if (retmsg != NULL) { | ||
ff_ipc_msg_free(retmsg); | ||
} | ||
|
||
ret = ff_ipc_recv(&retmsg, msg->msg_type); | ||
if (ret < 0) { | ||
errno = EPIPE; | ||
ff_ipc_msg_free(msg); | ||
return -1; | ||
} | ||
} while (msg != retmsg); | ||
|
||
*knictl = retmsg->knictl; | ||
|
||
ff_ipc_msg_free(msg); | ||
|
||
return 0; | ||
} | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
int ch, has_action = 0, i; | ||
enum FF_KNICTL_CMD cmd; | ||
struct ff_knictl_args knictl = {.kni_cmd = FF_KNICTL_CMD_GET}; | ||
struct ff_knictl_args pknictl[RTE_MAX_LCORE]; | ||
int proc_id = 0, max_proc_id = -1; | ||
|
||
ff_ipc_init(); | ||
while ((ch = getopt(argc, argv, "hp:P:a:n")) != -1) { | ||
switch(ch) { | ||
case 'p': | ||
proc_id = atoi(optarg); | ||
ff_set_proc_id(proc_id); | ||
break; | ||
case 'P': | ||
max_proc_id = atoi(optarg); | ||
if (max_proc_id < 0 || max_proc_id >= RTE_MAX_LCORE) { | ||
usage(); | ||
return -1; | ||
} | ||
break; | ||
case 'a': | ||
if (has_action){ | ||
usage(); | ||
return -1; | ||
} | ||
has_action = 1; | ||
cmd = knictl.kni_cmd = FF_KNICTL_CMD_SET; | ||
knictl.kni_action = get_action(optarg); | ||
if (knictl.kni_action < FF_KNICTL_ACTION_DEFAULT || knictl.kni_action >= FF_KNICTL_ACTION_MAX){ | ||
usage(); | ||
return -1; | ||
} | ||
break; | ||
case 'n': | ||
if (has_action){ | ||
usage(); | ||
return -1; | ||
} | ||
has_action = 1; | ||
cmd = knictl.kni_cmd = FF_KNICTL_CMD_GET; | ||
break; | ||
case 'h': | ||
default: | ||
usage(); | ||
return -1; | ||
} | ||
} | ||
if (max_proc_id == -1){ | ||
printf(" using default proc id\n"); | ||
int ret = knictl_status(&knictl); | ||
printf(" %s to %s knictl type: %s\n", ret ? "fail": "success", knictl.kni_cmd == FF_KNICTL_CMD_GET ? "get" : "set", get_action_str(knictl.kni_action)); | ||
} | ||
else { | ||
int proc_id = 0; | ||
for (; proc_id < max_proc_id; proc_id++){ | ||
pknictl[proc_id] = knictl; | ||
ff_set_proc_id(proc_id); | ||
int ret = knictl_status(&pknictl[proc_id]); | ||
printf(" %s to %s knictl type: %s, proc_id: %d\n", ret ? "fail": "success", pknictl[proc_id].kni_cmd == FF_KNICTL_CMD_GET ? "get" : "set", get_action_str(pknictl[proc_id].kni_action), proc_id); | ||
} | ||
} | ||
} |