aboutsummaryrefslogtreecommitdiff
path: root/src/bus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bus.c')
-rw-r--r--src/bus.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/bus.c b/src/bus.c
index 2515b0d..1b96b25 100644
--- a/src/bus.c
+++ b/src/bus.c
@@ -26,11 +26,63 @@
#include <unistd.h>
#include <linux/fs.h>
#include <sys/ioctl.h>
+#include <errno.h>
+#include <dirent.h>
#include "netnuke.h"
extern char* scsi_device_glob[];
extern char* ide_device_glob[];
+int scanbus_sysfs(nndevice_t** device)
+{
+ char tmpstr[128];
+ const char* scsi_path = "/sys/class/scsi_disk";
+ DIR *pdir;
+ struct dirent *pdent;
+ DIR *pbdir;
+ struct dirent *pbent;
+
+ /* scan for scsi devices via sysfs */
+ if((access(scsi_path, F_OK)) != 0)
+ {
+ COM(self, "Sysfs not available\n");
+ return 1;
+ }
+
+ pdir = opendir(scsi_path);
+ if(!pdir)
+ {
+ COM(self, "fatal opendir: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ while((pdent = readdir(pdir)))
+ {
+ if(!strncasecmp(pdent->d_name, ".", 1) || !strncasecmp(pdent->d_name, "..", 2))
+ continue;
+
+ sprintf(tmpstr, "%s/%s/device/block", scsi_path, pdent->d_name);
+ pbdir = opendir(tmpstr);
+ if(!pbdir)
+ {
+ COM(self, "fatal opendir: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ while((pbent = readdir(pbdir)))
+ {
+ if(!strncasecmp(pbent->d_name, ".", 1) || !strncasecmp(pbent->d_name, "..", 2))
+ continue;
+
+ printf("%s - %s\n", pdent->d_name, pbent->d_name);
+ }
+ closedir(pbdir);
+ }
+ closedir(pdir);
+
+ return 0;
+}
+
int scanbus(nndevice_t** device, int mask)
{
int fd = -1;