abis_nm: Support parsing nanoBTS format for Get Attributes Info

Spec compliant format is defined in:
* 3GPP TS 52.021 §8.11.3 "Get Attribute Response"
* 3GPP TS 52.021 §9.4.64 "Get Attribute Response Info".

On nanoBTS, however, reported attribute list is provided directly inside/after
the foh header instead of being enveloped inside the Get Attributes Response Info.
Furthermore, The Get Attributes Response Info can still appear and be at any position
in the reported attribute list, and it only contains the unreported
attribute ID list inside.

Change-Id: I81a613d53bddf432a79fa5cb0bf9d847b4bdee37
This commit is contained in:
Pau Espin 2018-11-08 16:45:25 +01:00
parent 1cdf1d76ae
commit 9dfa53c6e4
1 changed files with 9 additions and 1 deletions

View File

@ -494,7 +494,8 @@ static inline const uint8_t *parse_attr_resp_info_unreported(uint8_t bts_nr, con
bts_nr, get_value_string(abis_nm_att_names, ari[i + 1]));
/* the data starts right after the list of unreported attributes + space for length of that list */
*out_len = ari_len - (num_unreported + 2);
if (out_len)
*out_len = ari_len - (num_unreported + 2);
return ari + num_unreported + 1; /* we have to account for 1st byte with number of unreported attributes */
}
@ -575,6 +576,13 @@ static int parse_attr_resp_info_attr(struct gsm_bts *bts, const struct gsm_bts_t
bts->nr, unit_id);
}
/* nanoBTS provides Get Attribute Response Info at random position and only the unreported part of it. */
if (TLVP_PRES_LEN(tp, NM_ATT_GET_ARI, 1)) {
data = TLVP_VAL(tp, NM_ATT_GET_ARI);
len = TLVP_LEN(tp, NM_ATT_GET_ARI);
parse_attr_resp_info_unreported(bts->nr, data, len, NULL);
}
return 0;
}