Whamcloud - gitweb
LU-9119 lnet: remove debug ioctl
[fs/lustre-release.git] / lnet / utils / lnetconfig / liblnetconfig.c
index d32ce27..2515a02 100644 (file)
@@ -40,6 +40,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 #include <sys/ioctl.h>
 #include <net/if.h>
 #include <libcfs/util/ioctl.h>
@@ -584,17 +585,6 @@ int lustre_lnet_config_route(char *nw, char *gw, int hops, int prio,
                goto out;
        }
 
-       if (LNET_NETTYP(net) == CIBLND    ||
-           LNET_NETTYP(net) == OPENIBLND ||
-           LNET_NETTYP(net) == IIBLND    ||
-           LNET_NETTYP(net) == VIBLND) {
-               snprintf(err_str,
-                        sizeof(err_str),
-                        "\"obselete LNet type '%s'\"", libcfs_lnd2str(net));
-               rc = LUSTRE_CFG_RC_BAD_PARAM;
-               goto out;
-       }
-
        gateway_nid = libcfs_str2nid(gw);
        if (gateway_nid == LNET_NID_ANY) {
                snprintf(err_str,
@@ -678,17 +668,6 @@ int lustre_lnet_del_route(char *nw, char *gw,
                goto out;
        }
 
-       if (LNET_NETTYP(net) == CIBLND    ||
-           LNET_NETTYP(net) == OPENIBLND ||
-           LNET_NETTYP(net) == IIBLND    ||
-           LNET_NETTYP(net) == VIBLND) {
-               snprintf(err_str,
-                        sizeof(err_str),
-                        "\"obselete LNet type '%s'\"", libcfs_lnd2str(net));
-               rc = LUSTRE_CFG_RC_BAD_PARAM;
-               goto out;
-       }
-
        gateway_nid = libcfs_str2nid(gw);
        if (gateway_nid == LNET_NID_ANY) {
                snprintf(err_str,
@@ -745,17 +724,6 @@ int lustre_lnet_show_route(char *nw, char *gw, int hops, int prio, int detail,
                        goto out;
                }
 
-               if (LNET_NETTYP(net) == CIBLND    ||
-                   LNET_NETTYP(net) == OPENIBLND ||
-                   LNET_NETTYP(net) == IIBLND    ||
-                   LNET_NETTYP(net) == VIBLND) {
-                       snprintf(err_str,
-                                sizeof(err_str),
-                                "\"obsolete LNet type '%s'\"",
-                                libcfs_lnd2str(net));
-                       rc = LUSTRE_CFG_RC_BAD_PARAM;
-                       goto out;
-               }
        } else {
                /* show all routes without filtering on net */
                net = LNET_NIDNET(LNET_NID_ANY);
@@ -840,8 +808,8 @@ int lustre_lnet_show_route(char *nw, char *gw, int hops, int prio, int detail,
 
                if (detail) {
                        if (cYAML_create_number(item, "hop",
-                                               data.cfg_config_u.cfg_route.
-                                                       rtr_hop) ==
+                                               (int) data.cfg_config_u.
+                                               cfg_route.rtr_hop) ==
                            NULL)
                                goto out;
 
@@ -905,7 +873,7 @@ out:
 static int socket_intf_query(int request, char *intf,
                             struct ifreq *ifr)
 {
-       int rc;
+       int rc = 0;
        int sockfd;
 
        if (strlen(intf) >= IFNAMSIZ || ifr == NULL)
@@ -918,9 +886,11 @@ static int socket_intf_query(int request, char *intf,
        strcpy(ifr->ifr_name, intf);
        rc = ioctl(sockfd, request, ifr);
        if (rc != 0)
-               return LUSTRE_CFG_RC_BAD_PARAM;
+               rc = LUSTRE_CFG_RC_BAD_PARAM;
 
-       return 0;
+       close(sockfd);
+
+       return rc;
 }
 
 /*
@@ -1190,6 +1160,8 @@ lustre_lnet_ioctl_config_ni(struct list_head *intf_list,
                        len = sizeof(struct lnet_ioctl_config_ni);
 
                data = calloc(1, len);
+               if (!data)
+                       return LUSTRE_CFG_RC_OUT_OF_MEM;
                conf = (struct lnet_ioctl_config_ni*) data;
                if (i == 0 && tunables != NULL)
                        tun = (struct lnet_ioctl_config_lnd_tunables*)
@@ -1235,8 +1207,10 @@ lustre_lnet_ioctl_config_ni(struct list_head *intf_list,
                        snprintf(err_str,
                                 LNET_MAX_STR_LEN,
                                 "\"cannot add network: %s\"", strerror(errno));
+                       free(data);
                        return rc;
                }
+               free(data);
                i++;
        }
 
@@ -1264,6 +1238,11 @@ lustre_lnet_config_ip2nets(struct lustre_lnet_ip2nets *ip2nets,
                goto out;
        }
 
+       /*
+        * call below function to resolve the rules into a list of nids.
+        * The memory is allocated in that function then freed here when
+        * it's no longer needed.
+        */
        rc = lustre_lnet_resolve_ip2nets_rule(ip2nets, &nids, &nnids);
        if (rc != LUSTRE_CFG_RC_NO_ERR && rc != LUSTRE_CFG_RC_MATCH) {
                snprintf(err_str,
@@ -1275,14 +1254,15 @@ lustre_lnet_config_ip2nets(struct lustre_lnet_ip2nets *ip2nets,
        if (list_empty(&ip2nets->ip2nets_net.nw_intflist)) {
                snprintf(err_str, sizeof(err_str),
                         "\"no interfaces match ip2nets rules\"");
-               goto out;
+               goto free_nids_out;
        }
 
        rc = lustre_lnet_ioctl_config_ni(&ip2nets->ip2nets_net.nw_intflist,
                                         tunables, global_cpts, nids,
                                         err_str);
-       if (rc != LUSTRE_CFG_RC_NO_ERR)
-               free(nids);
+
+free_nids_out:
+       free(nids);
 
 out:
        cYAML_build_error(rc, seq_no, ADD_CMD, "ip2nets", err_str, err_rc);
@@ -1334,6 +1314,10 @@ int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr,
                else
                        len = sizeof(struct lnet_ioctl_config_ni);
                data = calloc(1, len);
+               if (!data) {
+                       rc = LUSTRE_CFG_RC_OUT_OF_MEM;
+                       goto out;
+               }
                conf = (struct lnet_ioctl_config_ni*) data;
                if (tunables != NULL)
                        tun = (struct lnet_ioctl_config_lnd_tunables*)
@@ -1376,8 +1360,10 @@ int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr,
                goto out;
        }
 
-       if (LNET_NETTYP(nw_descr->nw_id) == LOLND)
-               return LUSTRE_CFG_RC_NO_ERR;
+       if (LNET_NETTYP(nw_descr->nw_id) == LOLND) {
+               rc = LUSTRE_CFG_RC_NO_ERR;
+               goto out;
+       }
 
        if (nw_descr->nw_id == LNET_NIDNET(LNET_NID_ANY)) {
                snprintf(err_str,
@@ -1439,9 +1425,6 @@ int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw_descr,
        __u32 nnids = 0;
        struct lnet_dlc_intf_descr *intf_descr, *tmp;
 
-       if (LNET_NETTYP(nw_descr->nw_id) == LOLND)
-               return LUSTRE_CFG_RC_NO_ERR;
-
        snprintf(err_str, sizeof(err_str), "\"success\"");
 
        if (nw_descr == NULL) {
@@ -1452,6 +1435,9 @@ int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw_descr,
                goto out;
        }
 
+       if (LNET_NETTYP(nw_descr->nw_id) == LOLND)
+               return LUSTRE_CFG_RC_NO_ERR;
+
        if (nw_descr->nw_id == LNET_NIDNET(LNET_NID_ANY)) {
                snprintf(err_str,
                         sizeof(err_str),
@@ -2234,7 +2220,7 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc,
                                struct cYAML **err_rc)
 {
        struct lnet_ioctl_numa_range data;
-       int rc = LUSTRE_CFG_RC_OUT_OF_MEM;
+       int rc;
        int l_errno;
        char err_str[LNET_MAX_STR_LEN];
        struct cYAML *root = NULL, *range = NULL;
@@ -2254,6 +2240,8 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc,
                goto out;
        }
 
+       rc = LUSTRE_CFG_RC_OUT_OF_MEM;
+
        root = cYAML_create_object(NULL, NULL);
        if (root == NULL)
                goto out;
@@ -2270,6 +2258,7 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc,
                cYAML_print_tree(root);
 
        snprintf(err_str, sizeof(err_str), "\"success\"");
+       rc = LUSTRE_CFG_RC_NO_ERR;
 out:
        if (show_rc == NULL || rc != LUSTRE_CFG_RC_NO_ERR) {
                cYAML_free_tree(root);
@@ -2290,7 +2279,7 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc,
                           struct cYAML **err_rc)
 {
        struct lnet_ioctl_lnet_stats data;
-       int rc = LUSTRE_CFG_RC_OUT_OF_MEM;
+       int rc;
        int l_errno;
        char err_str[LNET_MAX_STR_LEN];
        struct cYAML *root = NULL, *stats = NULL;
@@ -2310,6 +2299,8 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc,
                goto out;
        }
 
+       rc = LUSTRE_CFG_RC_OUT_OF_MEM;
+
        root = cYAML_create_object(NULL, NULL);
        if (root == NULL)
                goto out;
@@ -2366,6 +2357,7 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc,
                cYAML_print_tree(root);
 
        snprintf(err_str, sizeof(err_str), "\"success\"");
+       rc = LUSTRE_CFG_RC_NO_ERR;
 out:
        if (show_rc == NULL || rc != LUSTRE_CFG_RC_NO_ERR) {
                cYAML_free_tree(root);
@@ -2572,6 +2564,8 @@ static int handle_yaml_config_ni(struct cYAML *tree, struct cYAML **show_rc,
        net = cYAML_get_object_item(tree, "net type");
        if (net)
                nw_descr.nw_id = libcfs_str2net(net->cy_valuestring);
+       else
+               nw_descr.nw_id = LOLND;
 
        /*
         * if neither net nor ip2nets are present, then we can not
@@ -3058,35 +3052,32 @@ struct lookup_cmd_hdlr_tbl {
 };
 
 static struct lookup_cmd_hdlr_tbl lookup_config_tbl[] = {
-       {"route", handle_yaml_config_route},
-       {"net", handle_yaml_config_ni},
-       {"ip2nets", handle_yaml_config_ip2nets},
-       {"peer", handle_yaml_config_peer},
-       {"routing", handle_yaml_config_routing},
-       {"buffers", handle_yaml_config_buffers},
-       {"numa", handle_yaml_config_numa},
-       {NULL, NULL}
-};
+       { .name = "route",      .cb = handle_yaml_config_route },
+       { .name = "net",        .cb = handle_yaml_config_ni },
+       { .name = "ip2nets",    .cb = handle_yaml_config_ip2nets },
+       { .name = "peer",       .cb = handle_yaml_config_peer },
+       { .name = "routing",    .cb = handle_yaml_config_routing },
+       { .name = "buffers",    .cb = handle_yaml_config_buffers },
+       { .name = "numa",       .cb = handle_yaml_config_numa },
+       { .name = NULL } };
 
 static struct lookup_cmd_hdlr_tbl lookup_del_tbl[] = {
-       {"route", handle_yaml_del_route},
-       {"net", handle_yaml_del_ni},
-       {"peer", handle_yaml_del_peer},
-       {"routing", handle_yaml_del_routing},
-       {"numa", handle_yaml_del_numa},
-       {NULL, NULL}
-};
+       { .name = "route",      .cb = handle_yaml_del_route },
+       { .name = "net",        .cb = handle_yaml_del_ni },
+       { .name = "peer",       .cb = handle_yaml_del_peer },
+       { .name = "routing",    .cb = handle_yaml_del_routing },
+       { .name = "numa",       .cb = handle_yaml_del_numa },
+       { .name = NULL } };
 
 static struct lookup_cmd_hdlr_tbl lookup_show_tbl[] = {
-       {"route", handle_yaml_show_route},
-       {"net", handle_yaml_show_net},
-       {"buffers", handle_yaml_show_routing},
-       {"routing", handle_yaml_show_routing},
-       {"peer", handle_yaml_show_peers},
-       {"statistics", handle_yaml_show_stats},
-       {"numa", handle_yaml_show_numa},
-       {NULL, NULL}
-};
+       { .name = "route",      .cb = handle_yaml_show_route },
+       { .name = "net",        .cb = handle_yaml_show_net },
+       { .name = "buffers",    .cb = handle_yaml_show_routing },
+       { .name = "routing",    .cb = handle_yaml_show_routing },
+       { .name = "peer",       .cb = handle_yaml_show_peers },
+       { .name = "statistics", .cb = handle_yaml_show_stats },
+       { .name = "numa",       .cb = handle_yaml_show_numa },
+       { .name = NULL } };
 
 static cmd_handler_t lookup_fn(char *key,
                               struct lookup_cmd_hdlr_tbl *tbl)
@@ -3167,46 +3158,3 @@ int lustre_yaml_show(char *f, struct cYAML **show_rc, struct cYAML **err_rc)
                                     show_rc, err_rc);
 }
 
-int lustre_lnet_send_dbg_task(enum lnet_dbg_task dbg_task,
-                             struct lnet_dbg_task_info *dbg_info,
-                             struct cYAML **show_rc,
-                             struct cYAML **err_rc)
-{
-       struct lnet_ioctl_dbg *dbg;
-       struct lnet_dbg_task_info *info;
-       int rc = LUSTRE_CFG_RC_NO_ERR;
-       char err_str[LNET_MAX_STR_LEN];
-
-       snprintf(err_str, sizeof(err_str), "\"success\"");
-
-       dbg = calloc(1, sizeof(*dbg) + sizeof(*info));
-       if (!dbg) {
-               snprintf(err_str, sizeof(err_str), "\"out of memory\"");
-               rc = LUSTRE_CFG_RC_OUT_OF_MEM;
-               goto out;
-       }
-
-       info = (struct lnet_dbg_task_info *)dbg->dbg_bulk;
-
-       LIBCFS_IOC_INIT_V2(*dbg, dbg_hdr);
-
-       dbg->dbg_task = dbg_task;
-       if (dbg_info)
-               memcpy(info, dbg_info, sizeof(*info));
-
-       rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_DBG, dbg);
-       if (rc != 0) {
-               rc = -errno;
-               snprintf(err_str,
-                        sizeof(err_str),
-                        "\"debug task failed %s\"", strerror(errno));
-               goto out;
-       }
-
-out:
-       cYAML_build_error(rc, -1, DBG_CMD,
-                        "debug", err_str, err_rc);
-
-       return rc;
-}
-