summaryrefslogtreecommitdiff
path: root/extras/multipath-tools/multipath/unused.c
blob: 08144cf71719b128a53f27956060c0d2d2e91253 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
static int
get_serial (int fd, char * str)
{
        char buff[MX_ALLOC_LEN + 1];
        int len;

        if (0 == do_inq(fd, 0, 1, 0x80, buff, MX_ALLOC_LEN, 0)) {
                len = buff[3];
                if (len > 0) {
                        memcpy(str, buff + 4, len);
                        buff[len] = '\0';
                }
                return 1;
        }
        return 0;
}

static int
do_tur(int fd)
{
        unsigned char turCmdBlk[TUR_CMD_LEN] = { 0x00, 0, 0, 0, 0, 0 };
        struct sg_io_hdr io_hdr;
        unsigned char sense_buffer[32];

        memset(&io_hdr, 0, sizeof (struct sg_io_hdr));
        io_hdr.interface_id = 'S';
        io_hdr.cmd_len = sizeof (turCmdBlk);
        io_hdr.mx_sb_len = sizeof (sense_buffer);
        io_hdr.dxfer_direction = SG_DXFER_NONE;
        io_hdr.cmdp = turCmdBlk;
        io_hdr.sbp = sense_buffer;
        io_hdr.timeout = 20000;
        io_hdr.pack_id = 0;
        if (ioctl(fd, SG_IO, &io_hdr) < 0) {
                close(fd);
                return 0;
        }
        if (io_hdr.info & SG_INFO_OK_MASK) {
                return 0;
        }
        return 1;
}

static int
del_map(char * str) {
        struct dm_task *dmt;

        if (!(dmt = dm_task_create(DM_DEVICE_REMOVE)))
                return 0;
        if (!dm_task_set_name(dmt, str))
                goto delout;
        if (!dm_task_run(dmt))
                goto delout;

        printf("Deleted device map : %s\n", str);

        delout:
        dm_task_destroy(dmt);
        return 1;
}

get_table(const char * str)
{
        int r = 0;
        struct dm_task *dmt;
        void *next = NULL;
        uint64_t start, length;
        char *target_type = NULL;
        char *params;

        if (!(dmt = dm_task_create(DM_DEVICE_TABLE)))
                return 0;

        if (!dm_task_set_name(dmt, str))
                goto out;

        if (!dm_task_run(dmt))
                goto out;

        do {
                next = dm_get_next_target(dmt, next, &start, &length,
                                          &target_type, &params);
                if (target_type) {
                        printf("%" PRIu64 " %" PRIu64 " %s %s\n",
                               start, length, target_type, params);
                }
        } while (next);

        r = 1;

      out:
        dm_task_destroy(dmt);
        return r;

}