interface: Improve checking availiablity 09/243209/1
authorDongwoo Lee <dwoo08.lee@samsung.com>
Thu, 3 Sep 2020 09:18:27 +0000 (18:18 +0900)
committerDongwoo Lee <dwoo08.lee@samsung.com>
Fri, 4 Sep 2020 02:44:29 +0000 (11:44 +0900)
This improving checking interface availability for both situation:
1) stucked on initializing interface due to no available interfaces,
and 2) options for unavailable interface is passed.

Change-Id: I895d0c6e6fcf1d4539cb419c5e9c4f69ef9bf544
Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
src/interface.c
src/interface.h
src/main.c

index 103b749..778f73a 100644 (file)
@@ -57,8 +57,8 @@ ssize_t tfm_interface_recv(struct tfm_interface *intf, void *buf, ssize_t len)
        return -ENOENT;
 }
 
-int tfm_interface_set_private(struct tfm_interface_context *ictx,
-                                       char *name, void *data)
+static struct tfm_interface *
+get_interface(struct tfm_interface_context *ictx, char *name)
 {
        struct tfm_interface *intf = NULL;
 
@@ -67,6 +67,21 @@ int tfm_interface_set_private(struct tfm_interface_context *ictx,
                        break;
        }
 
+       return intf;
+}
+
+int tfm_interface_is_available(struct tfm_interface_context *ictx,
+                               char *name)
+{
+       return !!(get_interface(ictx, name));
+}
+
+int tfm_interface_set_private(struct tfm_interface_context *ictx,
+                                       char *name, void *data)
+{
+       struct tfm_interface *intf;
+
+       intf = get_interface(ictx, name);
        if (!intf) {
                fprintf(stderr, "cannot find interface: %s\n", name);
                return -ENOENT;
@@ -226,6 +241,11 @@ struct tfm_interface_context *tfm_interface_init(void)
                LIST_INSERT_HEAD(&ictx->interface_list, intf, entry);
        }
 
+       if (LIST_EMPTY(&ictx->interface_list)) {
+               fprintf(stderr, "There is no available interfaces.\n");
+               goto err;
+       }
+
        return ictx;
 
 err:
index c908c1a..ae2ca93 100644 (file)
@@ -62,6 +62,7 @@ struct tfm_interface {
 
 ssize_t tfm_interface_send(struct tfm_interface *intf, void *buf, ssize_t len);
 ssize_t tfm_interface_recv(struct tfm_interface *intf, void *buf, ssize_t len);
+int tfm_interface_is_available(struct tfm_interface_context *ictx, char *name);
 int tfm_interface_set_private(struct tfm_interface_context *ictx,
                                        char *name, void *data);
 struct tfm_interface *tfm_interface_connect(struct tfm_interface_context *ictx);
index 7737e5e..c9a3865 100644 (file)
@@ -65,6 +65,13 @@ int _main(int argc, char *argv[])
                        unsigned long val;
                        char *endptr = NULL;
 
+                       if (!tfm_interface_is_available(supported_interfaces,
+                                                       "net")) {
+                               fprintf(stderr,
+                                       "'-p' option is ignored since net interface is not available.\n");
+                               continue;
+                       }
+
                        val = strtoul(optarg, &endptr, 0);
                        if (*optarg == '\0' || (endptr && *endptr != '\0')) {
                                fprintf(stderr,