diff options
author | Sjur Brændeland <sjur.brandeland@stericsson.com> | 2010-08-17 14:22:33 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-08-17 14:46:01 +0200 |
commit | 825a2c2d665fbae98fb75b843c6584a6f2082996 (patch) | |
tree | 5ea1d91fd9c831e96699c9def36f200ff90648c9 /plugins/ste.c | |
parent | e006d6db04284ed181d736b95b1d4fd746296e95 (diff) | |
download | ofono-825a2c2d665fbae98fb75b843c6584a6f2082996.tar.bz2 |
ste: Use SOCK_STREAM for CAIF and enable interface specification
Diffstat (limited to 'plugins/ste.c')
-rw-r--r-- | plugins/ste.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/plugins/ste.c b/plugins/ste.c index 39221611..0dcb7f50 100644 --- a/plugins/ste.c +++ b/plugins/ste.c @@ -30,6 +30,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <net/if.h> #include <glib.h> #include <gatchat.h> @@ -123,14 +124,31 @@ static int ste_enable(struct ofono_modem *modem) if (!device) { struct sockaddr_caif addr; int err; + const char *interface; /* Create a CAIF socket for AT Service */ - fd = socket(AF_CAIF, SOCK_SEQPACKET, CAIFPROTO_AT); + fd = socket(AF_CAIF, SOCK_STREAM, CAIFPROTO_AT); if (fd < 0) { ofono_error("Failed to create CAIF socket for AT"); return -EIO; } + /* Bind CAIF socket to specified interface */ + interface = ofono_modem_get_string(modem, "Interface"); + if (interface) { + struct ifreq ifreq; + memset(&ifreq, 0, sizeof(ifreq)); + strcpy(ifreq.ifr_name, interface); + err = setsockopt(fd, SOL_SOCKET, + SO_BINDTODEVICE, &ifreq, sizeof(ifreq)); + if (err < 0) { + ofono_error("Failed to bind caif socket " + "to interface"); + close(fd); + return err; + } + } + memset(&addr, 0, sizeof(addr)); addr.family = AF_CAIF; addr.u.at.type = CAIF_ATTYPE_PLAIN; |