Skip to content

Commit 5df8e3b

Browse files
mkjjk-ozlabs
authored andcommitted
examples/mi-mctp: Add 'dbus' option
This will query for all known endpoints and apply the action to each of them. Update to v1.x root API by Jeremy Kerr <[email protected]>. Signed-off-by: Matt Johnston <[email protected]> Signed-off-by: Jeremy Kerr <[email protected]>
1 parent e11d94e commit 5df8e3b

1 file changed

Lines changed: 77 additions & 41 deletions

File tree

examples/mi-mctp.c

Lines changed: 77 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -517,34 +517,73 @@ enum action {
517517
ACTION_SECURITY_INFO,
518518
};
519519

520+
static int do_action_endpoint(enum action action, nvme_mi_ep_t ep, int argc, char** argv)
521+
{
522+
int rc;
523+
524+
switch (action) {
525+
case ACTION_INFO:
526+
rc = do_info(ep);
527+
break;
528+
case ACTION_CONTROLLERS:
529+
rc = do_controllers(ep);
530+
break;
531+
case ACTION_IDENTIFY:
532+
rc = do_identify(ep, argc, argv);
533+
break;
534+
case ACTION_GET_LOG_PAGE:
535+
rc = do_get_log_page(ep, argc, argv);
536+
break;
537+
case ACTION_ADMIN_RAW:
538+
rc = do_admin_raw(ep, argc, argv);
539+
break;
540+
case ACTION_SECURITY_INFO:
541+
rc = do_security_info(ep, argc, argv);
542+
break;
543+
}
544+
return rc;
545+
}
546+
520547
int main(int argc, char **argv)
521548
{
522549
enum action action;
523550
nvme_root_t root;
524551
nvme_mi_ep_t ep;
552+
bool dbus = false, usage = true;
525553
uint8_t eid;
526-
int rc, net;
527-
528-
if (argc < 3) {
554+
int rc = 0, net;
555+
556+
if (argc >= 2 && strcmp(argv[1], "dbus") == 0) {
557+
usage = false;
558+
dbus= true;
559+
argv += 1;
560+
argc -= 1;
561+
} else if (argc >= 3) {
562+
usage = false;
563+
net = atoi(argv[1]);
564+
eid = atoi(argv[2]) & 0xff;
565+
argv += 2;
566+
argc -= 2;
567+
}
568+
569+
if (usage) {
529570
fprintf(stderr,
530-
"usage: %s <net> <eid> [action] [action args]\n",
531-
argv[0]);
571+
"usage: %s <net> <eid> [action] [action args]\n"
572+
" %s 'dbus' [action] [action args]\n",
573+
argv[0], argv[0]);
532574
fprintf(stderr, "where action is:\n"
533575
" info\n"
534576
" controllers\n"
535577
" identify <controller-id> [--partial]\n"
536578
" get-log-page <controller-id> [<log-id>]\n"
537579
" admin <controller-id> <opcode> [<cdw10>, <cdw11>, ...]\n"
538580
" security-info <controller-id>\n"
581+
"\n"
582+
" 'dbus' target will query D-Bus for known MCTP endpoints\n"
539583
);
540584
return EXIT_FAILURE;
541585
}
542586

543-
net = atoi(argv[1]);
544-
eid = atoi(argv[2]) & 0xff;
545-
argv += 2;
546-
argc -= 2;
547-
548587
if (argc == 1) {
549588
action = ACTION_INFO;
550589
} else {
@@ -569,40 +608,37 @@ int main(int argc, char **argv)
569608
return EXIT_FAILURE;
570609
}
571610
}
611+
if (dbus) {
612+
nvme_root_t root;
613+
int i = 0;
614+
615+
root = nvme_mi_scan_mctp();
616+
if (!root)
617+
errx(EXIT_FAILURE, "can't scan D-Bus entries");
618+
619+
nvme_mi_for_each_endpoint(root, ep) i++;
620+
printf("Found %d endpoints in D-Bus:\n", i);
621+
nvme_mi_for_each_endpoint(root, ep) {
622+
char *desc = nvme_mi_endpoint_desc(ep);
623+
printf("%s\n", desc);
624+
rc = do_action_endpoint(action, ep, argc, argv);
625+
printf("---\n");
626+
free(desc);
627+
}
628+
nvme_mi_free_root(root);
629+
} else {
630+
root = nvme_mi_create_root(stderr, DEFAULT_LOGLEVEL);
631+
if (!root)
632+
err(EXIT_FAILURE, "can't create NVMe root");
572633

573-
root = nvme_mi_create_root(stderr, DEFAULT_LOGLEVEL);
574-
if (!root)
575-
err(EXIT_FAILURE, "can't create NVMe root");
576-
577-
ep = nvme_mi_open_mctp(root, net, eid);
578-
if (!ep)
579-
err(EXIT_FAILURE, "can't open MCTP endpoint %d:%d", net, eid);
580-
581-
switch (action) {
582-
case ACTION_INFO:
583-
rc = do_info(ep);
584-
break;
585-
case ACTION_CONTROLLERS:
586-
rc = do_controllers(ep);
587-
break;
588-
case ACTION_IDENTIFY:
589-
rc = do_identify(ep, argc, argv);
590-
break;
591-
case ACTION_GET_LOG_PAGE:
592-
rc = do_get_log_page(ep, argc, argv);
593-
break;
594-
case ACTION_ADMIN_RAW:
595-
rc = do_admin_raw(ep, argc, argv);
596-
break;
597-
case ACTION_SECURITY_INFO:
598-
rc = do_security_info(ep, argc, argv);
599-
break;
634+
ep = nvme_mi_open_mctp(root, net, eid);
635+
if (!ep)
636+
errx(EXIT_FAILURE, "can't open MCTP endpoint %d:%d", net, eid);
637+
rc = do_action_endpoint(action, ep, argc, argv);
638+
nvme_mi_close(ep);
639+
nvme_mi_free_root(root);
600640
}
601641

602-
nvme_mi_close(ep);
603-
604-
nvme_mi_free_root(root);
605-
606642
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
607643
}
608644

0 commit comments

Comments
 (0)