From 825a2c2d665fbae98fb75b843c6584a6f2082996 Mon Sep 17 00:00:00 2001 From: Sjur Brændeland Date: Tue, 17 Aug 2010 14:22:33 +0200 Subject: ste: Use SOCK_STREAM for CAIF and enable interface specification --- plugins/ste.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'plugins/ste.c') 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 #include #include +#include #include #include @@ -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; -- cgit v1.2.3