#undef MAX_STRING_SIZE
+int op_catinfo(char *dir, char *keyword, char *node_name)
+{
+ char raw[OBD_MAX_IOCTL_BUFFER];
+ char out[LLOG_CHUNK_SIZE];
+ char *buf = raw;
+ struct obd_ioctl_data data;
+ char key[30];
+ DIR *root;
+ int rc;
+
+ sprintf(key, "%s", keyword);
+ memset(raw, 0, sizeof(buf));
+ memset(out, 0, sizeof(out));
+ data.ioc_inlbuf1 = key;
+ data.ioc_inllen1 = strlen(key) + 1;
+ if (node_name) {
+ data.ioc_inlbuf2 = node_name;
+ data.ioc_inllen2 = strlen(node_name) + 1;
+ }
+ data.ioc_pbuf1 = out;
+ data.ioc_plen1 = sizeof(out);
+ rc = obd_ioctl_pack(&data, &buf, sizeof(raw));
+ if (rc)
+ return rc;
+
+ root = opendir(dir);
+ if (root == NULL) {
+ err_msg("open %s failed", dir);
+ return errno;
+ }
+
+ rc = ioctl(dirfd(root), OBD_IOC_LLOG_CATINFO, buf);
+ if (rc)
+ err_msg("ioctl OBD_IOC_CATINFO failed");
+ else
+ fprintf(stdout, "%s", data.ioc_pbuf1);
+
+ closedir(root);
+ return rc;
+}
+