aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2011-07-02 14:32:32 +0200
committerPablo Neira Ayuso <pablo@gnumonks.org>2011-07-02 14:32:32 +0200
commitdfafe68a05069f0e0a21dfb5a200c38462031963 (patch)
tree4f62fbe334df1608c80748572e4c1d970620c768 /tests
parentc9c4fd39055ab02c0af59d5519e62edc456e3d0b (diff)
ipaccess: put the ID_GET logic for the BTS mode into the driver
This patch moves the ID_GET logic from the example file to the ipaccess driver in BTS mode.
Diffstat (limited to 'tests')
-rw-r--r--tests/e1inp_ipa_bts_test.c149
1 files changed, 13 insertions, 136 deletions
diff --git a/tests/e1inp_ipa_bts_test.c b/tests/e1inp_ipa_bts_test.c
index 643e898..dbd9e4c 100644
--- a/tests/e1inp_ipa_bts_test.c
+++ b/tests/e1inp_ipa_bts_test.c
@@ -27,134 +27,9 @@ const struct log_info bts_test_log_info = {
.num_cat = ARRAY_SIZE(bts_test_cat),
};
-struct dummy_bts {
- uint16_t bts_id;
- uint16_t site_id;
- uint16_t trx_id;
- uint8_t mac_addr[6];
-} dummy_bts = {
- .site_id = 0,
- .bts_id = 0,
- .trx_id = 0,
- .mac_addr = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-};
-
-char *software_version = "0.1";
-
-static struct msgb *abis_msgb_alloc(int headroom)
-{
- struct msgb *nmsg;
-
- headroom += sizeof(struct ipaccess_head);
-
- nmsg = msgb_alloc_headroom(1200 + headroom, headroom, "dummy BTS");
- if (!nmsg)
- return NULL;
- return nmsg;
-}
-
-static void abis_push_ipa(struct msgb *msg, uint8_t proto)
-{
- struct ipaccess_head *nhh;
-
- msg->l2h = msg->data;
- nhh = (struct ipaccess_head *) msgb_push(msg, sizeof(*nhh));
- nhh->proto = proto;
- nhh->len = htons(msgb_l2len(msg));
-}
-
-/* XXX: we have to do this in input/ipaccess.c, moreover we have to put this
- * information in some data structure that we'll pass to sign_link_up. */
-static struct msgb *ipa_bts_id_resp(uint8_t *data, int len)
-{
- struct msgb *nmsg;
- char str[64];
- uint8_t *tag;
-
- nmsg = abis_msgb_alloc(0);
- if (!nmsg)
- return NULL;
-
- *msgb_put(nmsg, 1) = IPAC_MSGT_ID_RESP;
- while (len) {
- if (len < 2) {
- LOGP(DBTSTEST, LOGL_NOTICE,
- "Short read of ipaccess tag\n");
- msgb_free(nmsg);
- return NULL;
- }
- switch (data[1]) {
- case IPAC_IDTAG_UNIT:
- sprintf(str, "%u/%u/%u",
- dummy_bts.site_id,
- dummy_bts.bts_id,
- dummy_bts.trx_id);
- break;
- case IPAC_IDTAG_MACADDR:
- sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x",
- dummy_bts.mac_addr[0], dummy_bts.mac_addr[1],
- dummy_bts.mac_addr[2], dummy_bts.mac_addr[3],
- dummy_bts.mac_addr[4], dummy_bts.mac_addr[5]);
- break;
- case IPAC_IDTAG_LOCATION1:
- strcpy(str, "osmoBTS");
- break;
- case IPAC_IDTAG_LOCATION2:
- strcpy(str, "osmoBTS");
- break;
- case IPAC_IDTAG_EQUIPVERS:
- case IPAC_IDTAG_SWVERSION:
- strcpy(str, software_version);
- break;
- case IPAC_IDTAG_UNITNAME:
- sprintf(str, "osmoBTS-%02x-%02x-%02x-%02x-%02x-%02x",
- dummy_bts.mac_addr[0], dummy_bts.mac_addr[1],
- dummy_bts.mac_addr[2], dummy_bts.mac_addr[3],
- dummy_bts.mac_addr[4], dummy_bts.mac_addr[5]);
- break;
- case IPAC_IDTAG_SERNR:
- strcpy(str, "");
- break;
- default:
- LOGP(DBTSTEST, LOGL_NOTICE,
- "Unknown ipaccess tag 0x%02x\n", *data);
- msgb_free(nmsg);
- return NULL;
- }
- LOGP(DBTSTEST, LOGL_INFO, " tag %d: %s\n", data[1], str);
- tag = msgb_put(nmsg, 3 + strlen(str) + 1);
- tag[0] = 0x00;
- tag[1] = 1 + strlen(str) + 1;
- tag[2] = data[1];
- memcpy(tag + 3, str, strlen(str) + 1);
- data += 2;
- len -= 2;
- }
- abis_push_ipa(nmsg, IPAC_PROTO_IPACCESS);
- return nmsg;
-}
-
-static struct msgb *ipa_bts_id_ack(void)
-{
- struct msgb *nmsg2;
-
- nmsg2 = abis_msgb_alloc(0);
- if (!nmsg2)
- return NULL;
-
- *msgb_put(nmsg2, 1) = IPAC_MSGT_ID_ACK;
- abis_push_ipa(nmsg2, IPAC_PROTO_IPACCESS);
-
- return nmsg2;
-}
-
static struct e1inp_sign_link *
sign_link_up(void *unit, struct e1inp_line *line, enum e1inp_sign_type type)
{
- struct msgb *msg = unit;
- struct msgb *rmsg;
- uint8_t *data = msgb_l2(msg);
- int len = msgb_l2len(msg);
struct e1inp_sign_link *sign_link = NULL;
void *dst = NULL;
@@ -187,17 +62,6 @@ sign_link_up(void *unit, struct e1inp_line *line, enum e1inp_sign_type type)
default:
return NULL;
}
-
- /* send ID_RESP. */
- rmsg = ipa_bts_id_resp(data + 1, len - 1);
- rmsg->dst = dst;
- abis_sendmsg(rmsg);
-
- /* send ID_ACK. */
- rmsg = ipa_bts_id_ack();
- rmsg->dst = dst;
- abis_sendmsg(rmsg);
-
return sign_link;
}
@@ -214,6 +78,18 @@ static int sign_link(struct msgb *msg, struct e1inp_sign_link *link)
int main(void)
{
+ struct ipaccess_unit bts_dev_info = {
+ .site_id = 0,
+ .bts_id = 0,
+ .trx_id = 0,
+ .unit_name = "testBTS",
+ .equipvers = "0.1",
+ .swversion = "0.1",
+ .mac_addr = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ .location1 = "testBTS",
+ .location2 = "testBTS",
+ .serno = "",
+ };
struct e1inp_line *line;
tall_test = talloc_named_const(NULL, 1, "e1inp_test");
@@ -224,6 +100,7 @@ int main(void)
struct e1inp_line_ops ops = {
.role = E1INP_LINE_R_BTS,
.addr = "127.0.0.1",
+ .data = &bts_dev_info,
.sign_link_up = sign_link_up,
.sign_link_down = sign_link_down,
.sign_link = sign_link,