--- plugins/ste.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/plugins/ste.c b/plugins/ste.c index 16ddbe1..479d85c 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> @@ -171,14 +172,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; -- 1.6.3.3 _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono