diff options
-rw-r--r-- | openbsc/include/openbsc/bsc_msc.h | 3 | ||||
-rw-r--r-- | openbsc/include/openbsc/gsm_data.h | 1 | ||||
-rw-r--r-- | openbsc/src/bsc_msc.c | 10 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 2 |
4 files changed, 13 insertions, 3 deletions
diff --git a/openbsc/include/openbsc/bsc_msc.h b/openbsc/include/openbsc/bsc_msc.h index 9b75def9a..faf6faaa3 100644 --- a/openbsc/include/openbsc/bsc_msc.h +++ b/openbsc/include/openbsc/bsc_msc.h @@ -32,6 +32,7 @@ struct bsc_msc_connection { int is_authenticated; const char *ip; int port; + int prio; void (*connection_loss) (struct bsc_msc_connection *); void (*connected) (struct bsc_msc_connection *); @@ -39,7 +40,7 @@ struct bsc_msc_connection { struct timer_list timeout_timer; }; -struct bsc_msc_connection *bsc_msc_create(const char *ip, int port); +struct bsc_msc_connection *bsc_msc_create(const char *ip, int port, int prio); int bsc_msc_connect(struct bsc_msc_connection *); void bsc_msc_schedule_connect(struct bsc_msc_connection *); diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 4292bb11b..f3f4ed37a 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -677,6 +677,7 @@ struct gsm_network { struct { enum rrlp_mode mode; } rrlp; + int msc_prio; }; #define SMS_HDR_SIZE 128 diff --git a/openbsc/src/bsc_msc.c b/openbsc/src/bsc_msc.c index 5ee267a2f..42b4c20f8 100644 --- a/openbsc/src/bsc_msc.c +++ b/openbsc/src/bsc_msc.c @@ -163,6 +163,13 @@ int bsc_msc_connect(struct bsc_msc_connection *con) /* make it non blocking */ setnonblocking(fd); + /* set the socket priority */ + ret = setsockopt(fd->fd, IPPROTO_IP, IP_TOS, + &con->prio, sizeof(con->prio)); + if (ret != 0) + LOGP(DMSC, LOGL_ERROR, "Failed to set prio to %d. %s\n", + con->prio, strerror(errno)); + memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(con->port); @@ -200,7 +207,7 @@ int bsc_msc_connect(struct bsc_msc_connection *con) return ret; } -struct bsc_msc_connection *bsc_msc_create(const char *ip, int port) +struct bsc_msc_connection *bsc_msc_create(const char *ip, int port, int prio) { struct bsc_msc_connection *con; @@ -212,6 +219,7 @@ struct bsc_msc_connection *bsc_msc_create(const char *ip, int port) con->ip = ip; con->port = port; + con->prio = prio; write_queue_init(&con->write_queue, 100); con->write_queue.except_cb = bsc_msc_except; return con; diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index c80c088a6..3b3bf6964 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -1110,7 +1110,7 @@ int main(int argc, char** argv) return -4; /* connect to the MSC */ - nat->msc_con = bsc_msc_create(nat->msc_ip, nat->msc_port); + nat->msc_con = bsc_msc_create(nat->msc_ip, nat->msc_port, 0); if (!nat->msc_con) { fprintf(stderr, "Creating a bsc_msc_connection failed.\n"); exit(1); |