From 4ee2eaf3c49018872c57ebb12cd44c33ed04eec4 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 5 Feb 2011 20:20:50 +0100 Subject: [DAHDI] make sure LAPD transmits with correct SAPI --- openbsc/src/input/dahdi.c | 3 ++- openbsc/src/input/lapd.c | 7 +++---- openbsc/src/input/lapd.h | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'openbsc') diff --git a/openbsc/src/input/dahdi.c b/openbsc/src/input/dahdi.c index 08bd1e01c..c086954c3 100644 --- a/openbsc/src/input/dahdi.c +++ b/openbsc/src/input/dahdi.c @@ -169,7 +169,8 @@ static int handle_ts1_write(struct bsc_fd *bfd) return 0; } - lapd_transmit(e1i_ts->driver.dahdi.lapd, sign_link->tei, msg->data, msg->len); + lapd_transmit(e1i_ts->driver.dahdi.lapd, sign_link->tei, + sign_link->sapi, msg->data, msg->len); msgb_free(msg); /* set tx delay timer for next event */ diff --git a/openbsc/src/input/lapd.c b/openbsc/src/input/lapd.c index de0d5a546..8aa71e2f5 100644 --- a/openbsc/src/input/lapd.c +++ b/openbsc/src/input/lapd.c @@ -97,7 +97,6 @@ struct lapd_tei { struct llist_head list; uint8_t tei; - uint8_t sapi; /* A valid N(R) value is one that is in the range V(A) ≤ N(R) ≤ V(S). */ int vs; /* next to be transmitted */ int va; /* last acked by peer */ @@ -456,7 +455,7 @@ uint8_t *lapd_receive(struct lapd_instance *li, uint8_t * data, unsigned int len return NULL; }; -void lapd_transmit(struct lapd_instance *li, uint8_t tei, +void lapd_transmit(struct lapd_instance *li, uint8_t tei, uint8_t sapi, uint8_t *data, unsigned int len) { //printf("lapd_transmit %d, %d\n", tei, len); @@ -475,8 +474,8 @@ void lapd_transmit(struct lapd_instance *li, uint8_t tei, memmove(buf + 4, data, len); len += 4; - buf[0] = (teip->sapi << 2) | (li->network_side ? 2 : 0); - buf[1] = (teip->tei << 1) | 1; + buf[0] = (sapi << 2) | (li->network_side ? 2 : 0); + buf[1] = (tei << 1) | 1; buf[2] = (LAPD_NS(teip) << 1); buf[3] = (LAPD_NR(teip) << 1) | 0; diff --git a/openbsc/src/input/lapd.h b/openbsc/src/input/lapd.h index f79d84f14..1661af781 100644 --- a/openbsc/src/input/lapd.h +++ b/openbsc/src/input/lapd.h @@ -29,7 +29,8 @@ struct lapd_instance { extern uint8_t *lapd_receive(struct lapd_instance *li, uint8_t *data, unsigned int len, int *ilen, lapd_mph_type *prim); -extern void lapd_transmit(struct lapd_instance *li, uint8_t tei, uint8_t *data, unsigned int len); +extern void lapd_transmit(struct lapd_instance *li, uint8_t tei, uint8_t sapi, + uint8_t *data, unsigned int len); struct lapd_instance *lapd_instance_alloc(void (*tx_cb)(uint8_t *data, int len, void *cbdata), void *cbdata); -- cgit v1.2.3