diff --git a/include/openbsc/debug.h b/include/openbsc/debug.h index 6fea58794..55a06d110 100644 --- a/include/openbsc/debug.h +++ b/include/openbsc/debug.h @@ -9,6 +9,7 @@ #define DRR 0x0008 #define DRSL 0x0010 #define DNM 0x0020 +#define DSMS 0x0100 #define DMI 0x1000 #define DMIB 0x2000 diff --git a/include/openbsc/gsm_04_08.h b/include/openbsc/gsm_04_08.h index 389daf596..f10d82190 100644 --- a/include/openbsc/gsm_04_08.h +++ b/include/openbsc/gsm_04_08.h @@ -69,12 +69,19 @@ struct gsm48_hdr { u_int8_t data[0]; } __attribute__ ((packed)); -/* Section 10.2 */ +/* Section 10.2 + GSM 04.07 12.2.3.1.1 */ +#define GSM48_PDISC_GROUP_CC 0x00 +#define GSM48_PDISC_BCAST_CC 0x01 +#define GSM48_PDISC_PDSS1 0x02 #define GSM48_PDISC_CC 0x03 +#define GSM48_PDISC_PDSS2 0x04 #define GSM48_PDISC_MM 0x05 #define GSM48_PDISC_RR 0x06 #define GSM48_PDISC_MM_GPRS 0x08 -#define GSM48_PDISC_SM 0x0a +#define GSM48_PDISC_SMS 0x09 +#define GSM48_PDISC_SM_GPRS 0x0a +#define GSM48_PDISC_NC_SS 0x0b +#define GSM48_PDISC_LOC 0x0c /* Section 10.4 */ #define GSM48_MT_RR_INIT_REQ 0x3c diff --git a/src/gsm_04_08.c b/src/gsm_04_08.c index 83399d021..6a797b73d 100644 --- a/src/gsm_04_08.c +++ b/src/gsm_04_08.c @@ -349,8 +349,10 @@ static int gsm48_tx_mm_serv_ack(struct gsm_lchan *lchan) static int gsm48_rx_mm_serv_req(struct msgb *msg) { struct gsm48_hdr *gh = msgb_l3(msg); + u_int8_t serv_type = gh->data[0] & 0x0f; + + DEBUGP(DMM, "CM SERVICE REQUEST serv_type=0x%02x\n", serv_type); - DEBUGP(DMM, "CM SERVICE REQUEST\n"); return gsm48_tx_mm_serv_ack(msg->lchan); } @@ -543,6 +545,12 @@ static int gsm0408_rcv_cc(struct msgb *msg) return rc; } +static int gsm0408_rcv_sms(struct msgb *msg) +{ + DEBUGP(DSMS, "SMS Message\n"); + return 0; +} + /* here we pass in a msgb from the RSL->RLL. We expect the l3 pointer to be set */ int gsm0408_rcvmsg(struct msgb *msg) { @@ -560,8 +568,11 @@ int gsm0408_rcvmsg(struct msgb *msg) case GSM48_PDISC_RR: rc = gsm0408_rcv_rr(msg); break; + case GSM48_PDISC_SMS: + rc = gsm0408_rcv_sms(msg); + break; case GSM48_PDISC_MM_GPRS: - case GSM48_PDISC_SM: + case GSM48_PDISC_SM_GPRS: fprintf(stderr, "Unimplemented GSM 04.08 discriminator 0x%02d\n", pdisc); break;