aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/input/ipaccess.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-03-18 00:01:43 +0800
committerHarald Welte <laforge@gnumonks.org>2010-05-04 07:20:41 +0200
commit5434d7ec8dd3b56d126b601e7805350a58deff36 (patch)
tree58ae9ea7bde9cd8c28a318d4c247f2bbaac18ade /openbsc/src/input/ipaccess.c
parentab88a62f6615e172f93b0be67f466e04181ca190 (diff)
GPRS: remove hard-coded IP address for NSIP responses from SGSN->BTS
Diffstat (limited to 'openbsc/src/input/ipaccess.c')
-rw-r--r--openbsc/src/input/ipaccess.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/openbsc/src/input/ipaccess.c b/openbsc/src/input/ipaccess.c
index fae9428da..80055ad9f 100644
--- a/openbsc/src/input/ipaccess.c
+++ b/openbsc/src/input/ipaccess.c
@@ -603,21 +603,20 @@ static int ipaccess_fd_cb(struct bsc_fd *bfd, unsigned int what)
return rc;
}
-/* declare this as a weak symbol to ensure code will still build
- * even if it does not provide this function */
-extern int gprs_ns_rcvmsg(struct msgb *msg) __attribute__((weak));
-
-static struct msgb *read_gprs_msg(struct bsc_fd *bfd, int *error)
+static struct msgb *read_gprs_msg(struct bsc_fd *bfd, int *error,
+ struct sockaddr_in *saddr)
{
struct msgb *msg = msgb_alloc(TS1_ALLOC_SIZE, "Abis/IP/GPRS");
int ret = 0;
+ socklen_t saddr_len = sizeof(*saddr);
if (!msg) {
*error = -ENOMEM;
return NULL;
}
- ret = recv(bfd->fd, msg->data, TS1_ALLOC_SIZE, 0);
+ ret = recvfrom(bfd->fd, msg->data, TS1_ALLOC_SIZE, 0,
+ (struct sockaddr *)saddr, &saddr_len);
if (ret < 0) {
fprintf(stderr, "recv error %s\n", strerror(errno));
msgb_free(msg);
@@ -638,34 +637,25 @@ static struct msgb *read_gprs_msg(struct bsc_fd *bfd, int *error)
static int handle_gprs_read(struct bsc_fd *bfd)
{
int error;
- struct msgb *msg = read_gprs_msg(bfd, &error);
+ struct sockaddr_in saddr;
+ struct msgb *msg = read_gprs_msg(bfd, &error, &saddr);
if (!msg)
return error;
- if (gprs_ns_rcvmsg)
- return gprs_ns_rcvmsg(msg);
- else {
- msgb_free(msg);
- return 0;
- }
+ return gprs_ns_rcvmsg(msg, &saddr);
}
static int handle_gprs_write(struct bsc_fd *bfd)
{
}
-int ipac_gprs_send(struct msgb *msg)
+int ipac_gprs_send(struct msgb *msg, struct sockaddr_in *daddr)
{
- struct sockaddr_in sin;
int rc;
- sin.sin_family = AF_INET;
- inet_aton("192.168.100.111", &sin.sin_addr);
- sin.sin_port = htons(23000);
-
rc = sendto(e1h->gprs_fd.fd, msg->data, msg->len, 0,
- (struct sockaddr *)&sin, sizeof(sin));
+ (struct sockaddr *)daddr, sizeof(*daddr));
talloc_free(msg);