Avoid the conflict of address name in container mode 38/264238/4 submit/tizen/20211013.075303
authorYoungHun Kim <yh8004.kim@samsung.com>
Wed, 15 Sep 2021 01:14:56 +0000 (10:14 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Mon, 11 Oct 2021 23:33:40 +0000 (08:33 +0900)
Change-Id: I372be21820ef5aa20f7edd46a513f22a6d1c23e2

packaging/murphy.spec
src/console-client/client.c
src/plugins/console/plugin-console.c
src/plugins/domain-control/client.h
src/plugins/domain-control/plugin-domain-control.c
src/plugins/domain-control/test-client.c
src/resource/protocol.h

index 26acaa2ec308212f2fe05673fe370a79631f905f..7f8d9e3c18a21270c45b5d1bb425e5699fa78b59 100644 (file)
@@ -29,7 +29,7 @@
 Summary: Resource policy framework
 Name: murphy
 Version: 0.0.75
-Release: 21
+Release: 22
 License: BSD-3-Clause
 Group: System/Service
 URL: http://01.org/murphy/
index 134669184f3df6f982bc0713572aca5c7f8ae247..9495fc1a17a072b435b5a7e1c5e85efe660bb7e7 100644 (file)
@@ -48,6 +48,7 @@
 
 #define DEFAULT_PROMPT  "murphy"
 #define DEFAULT_ADDRESS "unxs:@murphy-console"
+#define DEFAULT_CONTAINER_ADDRESS DEFAULT_ADDRESS"-container"
 
 
 /*
@@ -318,11 +319,17 @@ static void signal_handler(mrp_sighandler_t *h, int signum, void *user_data)
 }
 
 
+static bool is_in_container(void)
+{
+    return access("/run/systemd/container", F_OK) == 0;
+}
+
+
 static void client_set_defaults(client_t *c)
 {
     mrp_clear(c);
     c->seqno      = 1;
-    c->server     = DEFAULT_ADDRESS;
+    c->server     = is_in_container() ? DEFAULT_CONTAINER_ADDRESS : DEFAULT_ADDRESS;
     c->log_mask   = MRP_LOG_UPTO(MRP_LOG_INFO);
     c->log_target = MRP_LOG_TO_STDERR;
 }
index 13fa207e718b907c087b7b179f830ca7cf9898cb..fee47af5067844747b1a81aadba60403eb7b53f7 100644 (file)
@@ -49,6 +49,7 @@
 #include <murphy/plugins/console-protocol.h>
 
 #define DEFAULT_ADDRESS "unxs:@murphy-console"    /* default console address */
+#define DEFAULT_CONTAINER_ADDRESS DEFAULT_ADDRESS"-container"    /* default container console address */
 
 #ifdef MURPHY_DATADIR                             /* default content dir */
 #    define DEFAULT_HTTPDIR MURPHY_DATADIR"/webconsole"
@@ -729,6 +730,11 @@ enum {
 };
 
 
+static bool is_in_container(void)
+{
+    return access("/run/systemd/container", F_OK) == 0;
+}
+
 
 static int console_init(mrp_plugin_t *plugin)
 {
@@ -739,7 +745,7 @@ static int console_init(mrp_plugin_t *plugin)
         mrp_list_init(&data->clients);
 
         data->ctx     = plugin->ctx;
-        data->address = plugin->args[ARG_ADDRESS].str;
+        data->address = is_in_container() ? DEFAULT_CONTAINER_ADDRESS : plugin->args[ARG_ADDRESS].str;
         data->httpdir = plugin->args[ARG_HTTPDIR].str;
         data->sslcert = plugin->args[ARG_SSLCERT].str;
         data->sslpkey = plugin->args[ARG_SSLPKEY].str;
index 5a90b6d1120d2d3ca8dedbf7a0e3775b404c3b29..30a3158ad86f9e6c7376930d795ae199ff735aff 100644 (file)
@@ -38,6 +38,7 @@
 MRP_CDECL_BEGIN
 
 #define MRP_DEFAULT_DOMCTL_ADDRESS "unxs:@murphy-domctrl"
+#define MRP_DEFAULT_CONTAINER_DOMCTL_ADDRESS MRP_DEFAULT_DOMCTL_ADDRESS"-container"
 
 
 /*
index 287844e1311f1776ba07e090d502fad75c91402b..309cdb24a47370a5424ccd0c69e751c6ce13d58b 100644 (file)
@@ -37,6 +37,8 @@
 #include "client.h"
 
 #define DEFAULT_EXTADDR MRP_DEFAULT_DOMCTL_ADDRESS
+#define DEFAULT_CONTAINER_EXTADDR MRP_DEFAULT_CONTAINER_DOMCTL_ADDRESS
+
 #define NO_ADDR         NULL
 
 #ifdef MURPHY_DATADIR
@@ -53,9 +55,16 @@ enum {
 };
 
 
+static bool is_in_container(void)
+{
+    return access("/run/systemd/container", F_OK) == 0;
+}
+
+
 static int plugin_init(mrp_plugin_t *plugin)
 {
-    const char *extaddr = plugin->args[ARG_EXTADDR].str;
+    const char *extaddr = is_in_container() ?
+        DEFAULT_CONTAINER_EXTADDR : plugin->args[ARG_EXTADDR].str;
     const char *intaddr = plugin->args[ARG_INTADDR].str;
     const char *wrtaddr = plugin->args[ARG_WRTADDR].str;
     const char *httpdir = plugin->args[ARG_HTTPDIR].str;
index f8014701fc824285f3fc990d9ae5043c6a977c36..885557c2c9097bc9ce36b68777ddd334f544b15a 100644 (file)
@@ -1302,10 +1302,17 @@ static void print_usage(const char *argv0, int exit_code, const char *fmt, ...)
 }
 
 
+static bool is_in_container(void)
+{
+    return access("/run/systemd/container", F_OK) == 0;
+}
+
+
 static void client_set_defaults(client_t *c)
 {
     mrp_clear(c);
-    c->addrstr = MRP_DEFAULT_DOMCTL_ADDRESS;
+    c->addrstr = is_in_container() ?
+            MRP_DEFAULT_CONTAINER_DOMCTL_ADDRESS : MRP_DEFAULT_DOMCTL_ADDRESS;
     c->zone    = FALSE;
     c->verbose = FALSE;
     c->audio   = FALSE;
index 44075e8857eab7ca1f144e23c0086d90228cdc90..30c7691ab9bcd4dffc4873e847bfe4886d93460f 100644 (file)
 #include <stdint.h>
 #include <stdbool.h>
 #include <stdlib.h>
+#include <fcntl.h>
 
 #include <murphy/common/msg.h>
 
 #define RESPROTO_DEFAULT_ADDRESS      "unxs:@murphy-resource-native"
+#define RESPROTO_DEFAULT_CONTAINER_ADDRESS      RESPROTO_DEFAULT_ADDRESS"-container"
 #define RESPROTO_DEFAULT_ADDRVAR      "MURPHY_RESOURCE_ADDRESS"
 
 
@@ -93,14 +95,21 @@ typedef enum {
 } mrp_resproto_state_t;
 
 
+static bool is_in_container(void)
+{
+    return access("/run/systemd/container", F_OK) == 0;
+}
+
+
 static inline const char *mrp_resource_get_default_address(void)
 {
-    const char *addr;
+    const char *addr = getenv(RESPROTO_DEFAULT_ADDRVAR);
 
-    if ((addr = getenv(RESPROTO_DEFAULT_ADDRVAR)) == NULL)
-        return RESPROTO_DEFAULT_ADDRESS;
-    else
+    if (addr)
         return addr;
+
+    return is_in_container() ?
+        RESPROTO_DEFAULT_CONTAINER_ADDRESS : RESPROTO_DEFAULT_ADDRESS;
 }
 
 #endif  /* __MURPHY_RESOURCE_PROTOCOL_H__ */