portals.c

来自「lustre 1.6.5 source code」· C语言 代码 · 共 1,711 行 · 第 1/4 页

C
1,711
字号
            lnet_parse_ipaddr (&ipaddr, argv[2]) != 0) {                fprintf (stderr, "Can't parse ip addr %s\n", argv[2]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net     = g_net;        data.ioc_nid     = nid;        data.ioc_u32[0]  = ipaddr;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CLOSE_CONNECTION, &data);        if (rc != 0) {                fprintf(stderr, "failed to remove connection: %s\n",                        strerror(errno));                return -1;        }        return 0;}int jt_ptl_push_connection (int argc, char **argv){        struct libcfs_ioctl_data data;        int                      rc;        lnet_nid_t               nid = LNET_NID_ANY;        if (argc > 2) {                fprintf(stderr, "usage: %s [nid]\n", argv[0]);                return 0;        }        if (!g_net_is_compatible (argv[0], SOCKLND, 0))                return -1;        if (argc > 1 &&            !libcfs_str2anynid(&nid, argv[1])) {                fprintf(stderr, "Can't parse nid: %s\n", argv[1]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net     = g_net;        data.ioc_nid     = nid;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_PUSH_CONNECTION, &data);        if (rc != 0) {                fprintf(stderr, "failed to push connection: %s\n",                        strerror(errno));                return -1;        }        return 0;}intjt_ptl_print_active_txs (int argc, char **argv){        struct libcfs_ioctl_data data;        int                      index;        int                      rc;        if (!g_net_is_compatible (argv[0], QSWLND, 0))                return -1;        for (index = 0;;index++) {                LIBCFS_IOC_INIT(data);                data.ioc_net   = g_net;                data.ioc_count = index;                rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_GET_TXDESC, &data);                if (rc != 0)                        break;                printf ("type %u payload %6d to %s via %s by pid %6d: "                        "%s, %s, state %d\n",                        data.ioc_u32[0],                        data.ioc_count,                        libcfs_nid2str(data.ioc_nid),                        libcfs_nid2str(data.ioc_u64[0]),                        data.ioc_u32[1],                        (data.ioc_flags & 1) ? "delayed" : "immediate",                        (data.ioc_flags & 2) ? "nblk"    : "normal",                        data.ioc_flags >> 2);        }        if (index == 0) {                if (errno == ENOENT) {                        printf ("<no active descs>\n");                } else {                        fprintf(stderr, "Error getting active transmits list: "                                "%s: check dmesg.\n",                                strerror(errno));                }        }        return 0;}int jt_ptl_ping(int argc, char **argv){        int                      rc;        int                      timeout;        lnet_process_id_t        id;        lnet_process_id_t        ids[16];        int                      maxids = sizeof(ids)/sizeof(ids[0]);        struct libcfs_ioctl_data data;        char                    *sep;        int                      i;        if (argc < 2) {                fprintf(stderr, "usage: %s id [timeout (secs)]\n", argv[0]);                return 0;        }        sep = strchr(argv[1], '-');        if (sep == NULL) {                id.pid = LNET_PID_ANY;                id.nid = libcfs_str2nid(argv[1]);                if (id.nid == LNET_NID_ANY) {                        fprintf (stderr, "Can't parse nid \"%s\"\n", argv[1]);                        return -1;                }        } else {                char   *end;                if (argv[1][0] == 'u' ||                    argv[1][0] == 'U')                        id.pid = strtoul(&argv[1][1], &end, 0) | LNET_PID_USERFLAG;                else                        id.pid = strtoul(argv[1], &end, 0);                id.nid = libcfs_str2nid(sep + 1);                if (end != sep ||                    id.nid == LNET_NID_ANY) {                        fprintf(stderr, "Can't parse process id \"%s\"\n", argv[1]);                        return -1;                }        }        if (argc > 2)                timeout = 1000 * atol(argv[2]);        else                timeout = 1000;                 /* default 1 second timeout */        LIBCFS_IOC_INIT (data);        data.ioc_nid     = id.nid;        data.ioc_u32[0]  = id.pid;        data.ioc_u32[1]  = timeout;        data.ioc_plen1   = sizeof(ids);        data.ioc_pbuf1   = (char *)ids;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_PING, &data);        if (rc != 0) {                fprintf(stderr, "failed to ping %s: %s\n",                        id.pid == LNET_PID_ANY ?                        libcfs_nid2str(id.nid) : libcfs_id2str(id),                        strerror(errno));                return -1;        }        for (i = 0; i < data.ioc_count && i < maxids; i++)                printf("%s\n", libcfs_id2str(ids[i]));        if (data.ioc_count > maxids)                printf("%d out of %d ids listed\n", maxids, data.ioc_count);        return 0;}int jt_ptl_mynid(int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               nid;        int rc;        if (argc != 2) {                fprintf(stderr, "usage: %s NID\n", argv[0]);                return 0;        }        nid = libcfs_str2nid(argv[1]);        if (nid == LNET_NID_ANY) {                fprintf(stderr, "Can't parse NID '%s'\n", argv[1]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net = LNET_NIDNET(nid);        data.ioc_nid = nid;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_REGISTER_MYNID, &data);        if (rc < 0)                fprintf(stderr, "setting my NID failed: %s\n",                       strerror(errno));        else                printf("registered my nid %s\n", libcfs_nid2str(nid));        return 0;}intjt_ptl_fail_nid (int argc, char **argv){        int                      rc;        lnet_nid_t               nid;        unsigned int             threshold;        struct libcfs_ioctl_data data;        if (argc < 2 || argc > 3)        {                fprintf (stderr, "usage: %s nid|\"*\" [count (0 == mend)]\n", argv[0]);                return (0);        }        if (!libcfs_str2anynid(&nid, argv[1]))        {                fprintf (stderr, "Can't parse nid \"%s\"\n", argv[1]);                return (-1);        }        if (argc < 3) {                threshold = LNET_MD_THRESH_INF;        } else if (sscanf (argv[2], "%i", &threshold) != 1) {                fprintf (stderr, "Can't parse count \"%s\"\n", argv[2]);                return (-1);        }        LIBCFS_IOC_INIT (data);        data.ioc_nid = nid;        data.ioc_count = threshold;        rc = l_ioctl (LNET_DEV_ID, IOC_LIBCFS_FAIL_NID, &data);        if (rc < 0)                fprintf (stderr, "IOC_LIBCFS_FAIL_NID failed: %s\n",                         strerror (errno));        else                printf ("%s %s\n", threshold == 0 ? "Unfailing" : "Failing", argv[1]);        return (0);}intjt_ptl_add_route (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               gateway_nid;        unsigned int             hops = 1;        char                    *end;        int                      rc;        if (argc < 2 || argc > 3)        {                fprintf (stderr, "usage: %s gateway [hopcount]\n", argv[0]);                return (0);        }        if (!g_net_is_set(argv[0]))                return (-1);        gateway_nid = libcfs_str2nid(argv[1]);        if (gateway_nid == LNET_NID_ANY) {                fprintf (stderr, "Can't parse gateway NID \"%s\"\n", argv[1]);                return (-1);        }        if (argc == 3) {                hops = strtoul(argv[2], &end, 0);                if (hops >= 256 || *end != 0) {                        fprintf (stderr, "Can't parse hopcount \"%s\"\n", argv[2]);                        return -1;                }        }        LIBCFS_IOC_INIT(data);        data.ioc_net = g_net;        data.ioc_count = hops;        data.ioc_nid = gateway_nid;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_ADD_ROUTE, &data);        if (rc != 0) {                fprintf (stderr, "IOC_LIBCFS_ADD_ROUTE failed: %s\n", strerror (errno));                return (-1);        }        return (0);}intjt_ptl_del_route (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               nid;        int                      rc;        if (argc != 2) {                fprintf (stderr, "usage: %s gatewayNID\n", argv[0]);                return (0);        }        if (!libcfs_str2anynid(&nid, argv[1])) {                fprintf (stderr, "Can't parse gateway NID "                         "\"%s\"\n", argv[1]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net = g_net_set ? g_net : LNET_NIDNET(LNET_NID_ANY);        data.ioc_nid = nid;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_DEL_ROUTE, &data);        if (rc != 0) {                fprintf (stderr, "IOC_LIBCFS_DEL_ROUTE (%s) failed: %s\n",                         libcfs_nid2str(nid), strerror (errno));                return (-1);        }        return (0);}intjt_ptl_notify_router (int argc, char **argv){        struct libcfs_ioctl_data data;        int                      enable;        lnet_nid_t               nid;        int                      rc;        struct timeval           now;        time_t                   when;        if (argc < 3)        {                fprintf (stderr, "usage: %s targetNID <up/down> [<time>]\n",                          argv[0]);                return (0);        }        nid = libcfs_str2nid(argv[1]);        if (nid == LNET_NID_ANY) {                fprintf (stderr, "Can't parse target NID \"%s\"\n", argv[1]);                return (-1);        }        if (lnet_parse_bool (&enable, argv[2]) != 0) {                fprintf (stderr, "Can't parse boolean %s\n", argv[2]);                return (-1);        }        gettimeofday(&now, NULL);        if (argc < 4) {                when = now.tv_sec;        } else if (lnet_parse_time (&when, argv[3]) != 0) {                fprintf(stderr, "Can't parse time %s\n"                        "Please specify either 'YYYY-MM-DD-HH:MM:SS'\n"                        "or an absolute unix time in seconds\n", argv[3]);                return (-1);        } else if (when > now.tv_sec) {                fprintf (stderr, "%s specifies a time in the future\n",                         argv[3]);                return (-1);        }        LIBCFS_IOC_INIT(data);        data.ioc_nid = nid;        data.ioc_flags = enable;        /* Yeuch; 'cept I need a __u64 on 64 bit machines... */        data.ioc_u64[0] = (__u64)when;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_NOTIFY_ROUTER, &data);        if (rc != 0) {                fprintf (stderr, "IOC_LIBCFS_NOTIFY_ROUTER (%s) failed: %s\n",                         libcfs_nid2str(nid), strerror (errno));                return (-1);        }        return (0);}intjt_ptl_print_routes (int argc, char **argv){        struct libcfs_ioctl_data  data;        int                       rc;        int                       index;        __u32                     net;        lnet_nid_t                nid;        unsigned int              hops;        int                       alive;        for (index = 0;;index++)        {                LIBCFS_IOC_INIT(data);                data.ioc_count = index;                rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_GET_ROUTE, &data);                if (rc != 0)                        break;                net     = data.ioc_net;                hops    = data.ioc_count;                nid     = data.ioc_nid;                alive   = data.ioc_flags;                printf ("net %18s hops %u gw %32s %s\n",                         libcfs_net2str(net), hops,                        libcfs_nid2str(nid), alive ? "up" : "down");        }        if (errno != ENOENT)                fprintf(stderr, "Error getting routes: %s: check dmesg.\n",                        strerror(errno));        return (0);}static intlwt_control(int enable, int clear){        struct libcfs_ioctl_data data;        int                      rc;        LIBCFS_IOC_INIT(data);        data.ioc_flags = (enable ? 1 : 0) | (clear ? 2 : 0);        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_LWT_CONTROL, &data);        if (rc == 0)                return (0);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?