portals.c

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

C
1,711
字号
        if (best_nid == LNET_NID_ANY) {                fprintf(stderr, "No reachable NID\n");                return -1;        }        printf("%s\n", libcfs_nid2str(best_nid));        return 0;}intjt_ptl_print_interfaces (int argc, char **argv){        struct libcfs_ioctl_data data;        char                     buffer[3][64];        int                      index;        int                      rc;        if (!g_net_is_compatible (argv[0], SOCKLND, 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_INTERFACE, &data);                if (rc != 0)                        break;                printf ("%s: (%s/%s) npeer %d nroute %d\n",                        ptl_ipaddr_2_str(data.ioc_u32[0], buffer[2], 1),                        ptl_ipaddr_2_str(data.ioc_u32[0], buffer[0], 0),                        ptl_ipaddr_2_str(data.ioc_u32[1], buffer[1], 0),                        data.ioc_u32[2], data.ioc_u32[3]);        }        if (index == 0) {                if (errno == ENOENT) {                        printf ("<no interfaces>\n");                } else {                        fprintf(stderr, "Error getting interfaces: %s: "                                "check dmesg.\n",                                strerror(errno));                }        }        return 0;}intjt_ptl_add_interface (int argc, char **argv){        struct libcfs_ioctl_data data;        __u32                    ipaddr;        int                      rc;        __u32                    netmask = 0xffffff00;        int                      i;        int                      count;        char                    *end;        if (argc < 2 || argc > 3) {                fprintf (stderr, "usage: %s ipaddr [netmask]\n", argv[0]);                return 0;        }        if (!g_net_is_compatible(argv[0], SOCKLND, 0))                return -1;        if (lnet_parse_ipaddr(&ipaddr, argv[1]) != 0) {                fprintf (stderr, "Can't parse ip: %s\n", argv[1]);                return -1;        }        if (argc > 2 ) {                count = strtol(argv[2], &end, 0);                if (count > 0 && count < 32 && *end == 0) {                        netmask = 0;                        for (i = count; i > 0; i--)                                netmask = netmask|(1<<(32-i));                } else if (lnet_parse_ipquad(&netmask, argv[2]) != 0) {                        fprintf (stderr, "Can't parse netmask: %s\n", argv[2]);                        return -1;                }        }        LIBCFS_IOC_INIT(data);        data.ioc_net    = g_net;        data.ioc_u32[0] = ipaddr;        data.ioc_u32[1] = netmask;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_ADD_INTERFACE, &data);        if (rc != 0) {                fprintf (stderr, "failed to add interface: %s\n",                         strerror (errno));                return -1;        }        return 0;}intjt_ptl_del_interface (int argc, char **argv){        struct libcfs_ioctl_data data;        int                      rc;        __u32                    ipaddr = 0;        if (argc > 2) {                fprintf (stderr, "usage: %s [ipaddr]\n", argv[0]);                return 0;        }        if (!g_net_is_compatible(argv[0], SOCKLND, 0))                return -1;        if (argc == 2 &&            lnet_parse_ipaddr(&ipaddr, argv[1]) != 0) {                fprintf (stderr, "Can't parse ip: %s\n", argv[1]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net    = g_net;        data.ioc_u32[0] = ipaddr;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_DEL_INTERFACE, &data);        if (rc != 0) {                fprintf (stderr, "failed to delete interface: %s\n",                         strerror (errno));                return -1;        }        return 0;}intjt_ptl_print_peers (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_process_id_t        id;        char                     buffer[2][64];        int                      index;        int                      rc;        if (!g_net_is_compatible (argv[0], SOCKLND, RALND, PTLLND, MXLND,                                  OPENIBLND, CIBLND, IIBLND, VIBLND, O2IBLND, 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_PEER, &data);                if (rc != 0)                        break;                if (g_net_is_compatible(NULL, SOCKLND, 0)) {                        id.nid = data.ioc_nid;                        id.pid = data.ioc_u32[4];                        printf ("%-20s [%d]%s->%s:%d #%d\n",                                libcfs_id2str(id),                                 data.ioc_count, /* persistence */                                ptl_ipaddr_2_str (data.ioc_u32[2], buffer[0], 1), /* my ip */                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* peer ip */                                data.ioc_u32[1], /* peer port */                                data.ioc_u32[3]); /* conn_count */                } else if (g_net_is_compatible(NULL, PTLLND, 0)) {                        id.nid = data.ioc_nid;                        id.pid = data.ioc_u32[4];                        printf ("%-20s s %d%s [%d] "LPD64".%06d"                                " m "LPD64"/"LPD64" q %d/%d c %d/%d\n",                                libcfs_id2str(id),                                data.ioc_net,   /* state */                                data.ioc_flags ? "" : " ~!h", /* sent_hello */                                data.ioc_count, /* refcount */                                data.ioc_u64[0]/1000000, /* incarnation secs */                                (int)(data.ioc_u64[0]%1000000), /* incarnation usecs */                                (((__u64)data.ioc_u32[1])<<32) |                                ((__u64)data.ioc_u32[0]), /* next_matchbits */                                (((__u64)data.ioc_u32[3])<<32) |                                ((__u64)data.ioc_u32[2]), /* last_matchbits_seen */                                data.ioc_u32[5] >> 16, /* nsendq */                                data.ioc_u32[5] & 0xffff, /* nactiveq */                                data.ioc_u32[6] >> 16, /* credits */                                data.ioc_u32[6] & 0xffff); /* outstanding_credits */                } else if (g_net_is_compatible(NULL, RALND, OPENIBLND, CIBLND, VIBLND, 0)) {                        printf ("%-20s [%d]@%s:%d\n",                                libcfs_nid2str(data.ioc_nid), /* peer nid */                                data.ioc_count,   /* peer persistence */                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* peer ip */                                data.ioc_u32[1]); /* peer port */                } else {                        printf ("%-20s [%d]\n",                                libcfs_nid2str(data.ioc_nid), data.ioc_count);                }        }        if (index == 0) {                if (errno == ENOENT) {                        printf ("<no peers>\n");                } else {                        fprintf(stderr, "Error getting peer list: %s: "                                "check dmesg.\n",                                strerror(errno));                }        }        return 0;}intjt_ptl_add_peer (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               nid;        __u32                    ip = 0;        int                      port = 0;        int                      rc;        if (!g_net_is_compatible (argv[0], SOCKLND, RALND,                                  OPENIBLND, CIBLND, IIBLND, VIBLND, 0))                return -1;        if (g_net_is_compatible(NULL, SOCKLND, OPENIBLND, CIBLND, RALND, 0)) {                if (argc != 4) {                        fprintf (stderr, "usage(tcp,openib,cib,ra): %s nid ipaddr port\n",                                 argv[0]);                        return 0;                }        } else if (g_net_is_compatible(NULL, VIBLND, 0)) {                if (argc != 3) {                        fprintf (stderr, "usage(vib): %s nid ipaddr\n",                                 argv[0]);                        return 0;                }        } else if (argc != 2) {                fprintf (stderr, "usage(iib): %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;        }        if (g_net_is_compatible (NULL, SOCKLND, OPENIBLND, CIBLND, VIBLND, RALND, 0) &&            lnet_parse_ipaddr (&ip, argv[2]) != 0) {                fprintf (stderr, "Can't parse ip addr: %s\n", argv[2]);                return -1;        }        if (g_net_is_compatible (NULL, SOCKLND, OPENIBLND, CIBLND, RALND, 0) &&            lnet_parse_port (&port, argv[3]) != 0) {                fprintf (stderr, "Can't parse port: %s\n", argv[3]);                return -1;        }        LIBCFS_IOC_INIT(data);        data.ioc_net    = g_net;        data.ioc_nid    = nid;        data.ioc_u32[0] = ip;        data.ioc_u32[1] = port;        rc = l_ioctl (LNET_DEV_ID, IOC_LIBCFS_ADD_PEER, &data);        if (rc != 0) {                fprintf (stderr, "failed to add peer: %s\n",                         strerror (errno));                return -1;        }        return 0;}intjt_ptl_del_peer (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               nid = LNET_NID_ANY;        lnet_pid_t               pid = LNET_PID_ANY;        __u32                    ip = 0;        char                    *end;        int                      rc;        if (!g_net_is_compatible (argv[0], SOCKLND, RALND, MXLND, PTLLND,                                  OPENIBLND, CIBLND, IIBLND, VIBLND, O2IBLND, 0))                return -1;        if (g_net_is_compatible(NULL, SOCKLND, 0)) {                if (argc > 3) {                        fprintf (stderr, "usage: %s [nid] [ipaddr]\n",                                 argv[0]);                        return 0;                }        } else if (g_net_is_compatible(NULL, PTLLND, 0)) {                if (argc > 3) {                        fprintf (stderr, "usage: %s [nid] [pid]\n",                                 argv[0]);                        return 0;                }        } else if (argc > 2) {                fprintf (stderr, "usage: %s [nid]\n", argv[0]);                return 0;        }        if (argc > 1 &&            !libcfs_str2anynid(&nid, argv[1])) {                fprintf (stderr, "Can't parse nid: %s\n", argv[1]);                return -1;        }        if (g_net_is_compatible(NULL, SOCKLND, 0)) {                if (argc > 2 &&                    lnet_parse_ipaddr (&ip, argv[2]) != 0) {                        fprintf (stderr, "Can't parse ip addr: %s\n",                                 argv[2]);                        return -1;                }        } else if (g_net_is_compatible(NULL, PTLLND, 0)) {                if (argc > 2) {                        pid = strtol(argv[2], &end, 0);                        if (end == argv[2] || *end == 0) {                                fprintf(stderr, "Can't parse pid %s\n",                                        argv[2]);                                return -1;                        }                }        }        LIBCFS_IOC_INIT(data);        data.ioc_net    = g_net;        data.ioc_nid    = nid;        data.ioc_u32[0] = ip;        data.ioc_u32[1] = pid;        rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_DEL_PEER, &data);        if (rc != 0) {                fprintf (stderr, "failed to remove peer: %s\n",                         strerror (errno));                return -1;        }        return 0;}intjt_ptl_print_connections (int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_process_id_t        id;        char                     buffer[2][64];        int                      index;        int                      rc;        if (!g_net_is_compatible (argv[0], SOCKLND, RALND, MXLND,                                  OPENIBLND, CIBLND, IIBLND, VIBLND, O2IBLND, 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_CONN, &data);                if (rc != 0)                        break;                if (g_net_is_compatible (NULL, SOCKLND, 0)) {                        id.nid = data.ioc_nid;                        id.pid = data.ioc_u32[6];                        printf ("%-20s %s[%d]%s->%s:%d %d/%d %s\n",                                libcfs_id2str(id),                                (data.ioc_u32[3] == SOCKLND_CONN_ANY) ? "A" :                                (data.ioc_u32[3] == SOCKLND_CONN_CONTROL) ? "C" :                                (data.ioc_u32[3] == SOCKLND_CONN_BULK_IN) ? "I" :                                (data.ioc_u32[3] == SOCKLND_CONN_BULK_OUT) ? "O" : "?",                                data.ioc_u32[4], /* scheduler */                                ptl_ipaddr_2_str (data.ioc_u32[2], buffer[0], 1), /* local IP addr */                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* remote IP addr */                                data.ioc_u32[1],         /* remote port */                                data.ioc_count, /* tx buffer size */                                data.ioc_u32[5], /* rx buffer size */                                data.ioc_flags ? "nagle" : "nonagle");                } else if (g_net_is_compatible (NULL, RALND, 0)) {                        printf ("%-20s [%d]\n",                                libcfs_nid2str(data.ioc_nid),                                data.ioc_u32[0] /* device id */);                } else {                        printf ("%s\n", libcfs_nid2str(data.ioc_nid));                }        }        if (index == 0) {                if (errno == ENOENT) {                        printf ("<no connections>\n");                } else {                        fprintf(stderr, "Error getting connection list: %s: "                                "check dmesg.\n",                                strerror(errno));                }        }        return 0;}int jt_ptl_disconnect(int argc, char **argv){        struct libcfs_ioctl_data data;        lnet_nid_t               nid = LNET_NID_ANY;        __u32                    ipaddr = 0;        int                      rc;        if (argc > 3) {                fprintf(stderr, "usage: %s [nid] [ipaddr]\n", argv[0]);                return 0;        }        if (!g_net_is_compatible (NULL, SOCKLND, RALND, MXLND,                                  OPENIBLND, CIBLND, IIBLND, VIBLND, O2IBLND, 0))                return 0;        if (argc >= 2 &&            !libcfs_str2anynid(&nid, argv[1])) {                fprintf (stderr, "Can't parse nid %s\n", argv[1]);                return -1;        }        if (g_net_is_compatible (NULL, SOCKLND, 0) &&            argc >= 3 &&

⌨️ 快捷键说明

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