From: Holger Hans Peter Freyther <[email protected]>

Certain attributes are read-only. Add a macro to make it more
easy to define those.
---
 openbsc/include/openbsc/control_cmd.h | 20 ++++++++++++++++++
 openbsc/src/osmo-bsc/osmo_bsc_ctrl.c  | 38 +++--------------------------------
 2 files changed, 23 insertions(+), 35 deletions(-)

diff --git a/openbsc/include/openbsc/control_cmd.h 
b/openbsc/include/openbsc/control_cmd.h
index 8aede15..df5ae23 100644
--- a/openbsc/include/openbsc/control_cmd.h
+++ b/openbsc/include/openbsc/control_cmd.h
@@ -172,6 +172,26 @@ static struct ctrl_cmd_element cmd_##cmdname = { \
        .verify = &verify_##cmdname, \
 }
 
+#define CTRL_CMD_DEFINE_RO(cmdname, cmdstr) \
+static int get_##cmdname(struct ctrl_cmd *cmd, void *data);            \
+static inline int set_##cmdname(struct ctrl_cmd *cmd, void *data)      \
+{                                                                      \
+       cmd->reply = "Read Only attribute";                             \
+       return CTRL_CMD_ERROR;                                          \
+}                                                                      \
+static inline int verify_##cmdname(struct ctrl_cmd *cmd, const char *value, 
void *data) \
+{                                                                      \
+       cmd->reply = "Read Only attribute";                             \
+       return 1;                                                       \
+}                                                                      \
+static struct ctrl_cmd_element cmd_##cmdname = { \
+       .name = cmdstr, \
+       .param = NULL, \
+       .get = &get_##cmdname, \
+       .set = &set_##cmdname, \
+       .verify = &verify_##cmdname, \
+}
+
 struct gsm_network;
 
 #endif /* _CONTROL_CMD_H */
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c 
b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
index e32218d..d3593de 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -58,7 +58,7 @@ void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct 
bsc_msc_connection *msc_con
        talloc_free(trap);
 }
 
-CTRL_CMD_DEFINE(msc_connection_status, "msc_connection_status");
+CTRL_CMD_DEFINE_RO(msc_connection_status, "msc_connection_status");
 static int msc_connection_status = 0;
 
 static int get_msc_connection_status(struct ctrl_cmd *cmd, void *data)
@@ -70,17 +70,6 @@ static int get_msc_connection_status(struct ctrl_cmd *cmd, 
void *data)
        return CTRL_CMD_REPLY;
 }
 
-static int set_msc_connection_status(struct ctrl_cmd *cmd, void *data)
-{
-       return CTRL_CMD_ERROR;
-}
-
-static int verify_msc_connection_status(struct ctrl_cmd *cmd, const char 
*value, void *data)
-{
-       cmd->reply = "Read-only property";
-       return 1;
-}
-
 static int msc_connection_status_trap_cb(unsigned int subsys, unsigned int 
signal, void *handler_data, void *signal_data)
 {
        struct ctrl_cmd *cmd;
@@ -114,7 +103,7 @@ static int msc_connection_status_trap_cb(unsigned int 
subsys, unsigned int signa
        return 0;
 }
 
-CTRL_CMD_DEFINE(bts_connection_status, "bts_connection_status");
+CTRL_CMD_DEFINE_RO(bts_connection_status, "bts_connection_status");
 static int bts_connection_status = 0;
 
 static int get_bts_connection_status(struct ctrl_cmd *cmd, void *data)
@@ -126,17 +115,6 @@ static int get_bts_connection_status(struct ctrl_cmd *cmd, 
void *data)
        return CTRL_CMD_REPLY;
 }
 
-static int set_bts_connection_status(struct ctrl_cmd *cmd, void *data)
-{
-       return CTRL_CMD_ERROR;
-}
-
-static int verify_bts_connection_status(struct ctrl_cmd *cmd, const char 
*value, void *data)
-{
-       cmd->reply = "Read-only property";
-       return 1;
-}
-
 static int bts_connection_status_trap_cb(unsigned int subsys, unsigned int 
signal, void *handler_data, void *signal_data)
 {
        struct ctrl_cmd *cmd;
@@ -496,7 +474,7 @@ err:
        return 1;
 }
 
-CTRL_CMD_DEFINE(bts_rf_state, "rf_state");
+CTRL_CMD_DEFINE_RO(bts_rf_state, "rf_state");
 static int get_bts_rf_state(struct ctrl_cmd *cmd, void *data)
 {
        const char *oper, *admin, *policy;
@@ -520,16 +498,6 @@ static int get_bts_rf_state(struct ctrl_cmd *cmd, void 
*data)
        return CTRL_CMD_REPLY;
 }
 
-static int set_bts_rf_state(struct ctrl_cmd *cmd, void *data)
-{
-       cmd->reply = "set is unimplemented";
-       return CTRL_CMD_ERROR;
-}
-
-static int verify_bts_rf_state(struct ctrl_cmd *cmd, const char *value, void 
*data)
-{
-       return 0;
-}
 
 CTRL_CMD_DEFINE(net_rf_lock, "rf_locked");
 static int get_net_rf_lock(struct ctrl_cmd *cmd, void *data)
-- 
1.9.1


Reply via email to