aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/abis_nm.c
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2010-01-07 00:43:11 +0100
committerDaniel Willmann <daniel@totalueberwachung.de>2010-01-07 14:03:21 +0100
commit493db4ee3db9d10b4af931972bd505f8d5cbb9b7 (patch)
tree059f7d7c23fff254efeda93db7438f20200de1b4 /openbsc/src/abis_nm.c
parentef24dff2a22c907f08a24b19773dde5ce20ba5d6 (diff)
[abis_nm] Add generic abis_nm_bs11_logon function
Factoring out common logon functionality will allow us to logon as different user. abis_nm_bs11_factory_logon now uses this function.
Diffstat (limited to 'openbsc/src/abis_nm.c')
-rw-r--r--openbsc/src/abis_nm.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c
index 8789674e0..bfc3de2c9 100644
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/abis_nm.c
@@ -2417,11 +2417,14 @@ int abis_nm_bs11_get_cclk(struct gsm_bts *bts)
}
//static const u_int8_t bs11_logon_c7[] = { 0x07, 0xd9, 0x01, 0x11, 0x0d, 0x10, 0x20 };
-static const u_int8_t bs11_logon_c8[] = { 0x02 };
-static const u_int8_t bs11_logon_c9[] = "FACTORY";
int abis_nm_bs11_factory_logon(struct gsm_bts *bts, int on)
{
+ return abis_nm_bs11_logon(bts, 0x02, "FACTORY", on);
+}
+
+int abis_nm_bs11_logon(struct gsm_bts *bts, u_int8_t level, const char *name, int on)
+{
struct abis_om_hdr *oh;
struct msgb *msg = nm_msgb_alloc();
struct bs11_date_time bdt;
@@ -2431,15 +2434,15 @@ int abis_nm_bs11_factory_logon(struct gsm_bts *bts, int on)
oh = (struct abis_om_hdr *) msgb_put(msg, ABIS_OM_FOM_HDR_SIZE);
if (on) {
u_int8_t len = 3*2 + sizeof(bdt)
- + sizeof(bs11_logon_c8) + sizeof(bs11_logon_c9);
+ + 1 + strlen(name);
fill_om_fom_hdr(oh, len, NM_MT_BS11_LMT_LOGON,
NM_OC_BS11_BTSE, 0xff, 0xff, 0xff);
msgb_tlv_put(msg, NM_ATT_BS11_LMT_LOGIN_TIME,
sizeof(bdt), (u_int8_t *) &bdt);
msgb_tlv_put(msg, NM_ATT_BS11_LMT_USER_ACC_LEV,
- sizeof(bs11_logon_c8), bs11_logon_c8);
+ 1, &level);
msgb_tlv_put(msg, NM_ATT_BS11_LMT_USER_NAME,
- sizeof(bs11_logon_c9), bs11_logon_c9);
+ strlen(name), (u_int8_t *)name);
} else {
fill_om_fom_hdr(oh, 0, NM_MT_BS11_LMT_LOGOFF,
NM_OC_BS11_BTSE, 0xff, 0xff, 0xff);