RTP add vlan set.

Change-Id: Ia0b72f2d21759b932f5737e694a5badcc0e9cffc
diff --git a/mbtk/mbtk_rtpd/src/rtp_server.c b/mbtk/mbtk_rtpd/src/rtp_server.c
index 4ae8a74..155ade2 100755
--- a/mbtk/mbtk_rtpd/src/rtp_server.c
+++ b/mbtk/mbtk_rtpd/src/rtp_server.c
@@ -41,6 +41,7 @@
 #include "mbtk_utils.h"
 #include "mbtk_audio2.h"
 #include "mbtk_rtp_internal.h"
+#include "mbtk_ifc.h"
 
 #define RTP_DEBUG_PCM_FILE 1
 #define RTP_UDP_READ_BUFF_SIZE 2048
@@ -375,6 +376,26 @@
     return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
 }
 
+int ip_get_from_dev(const char *dev_name, void *addr)
+{
+    int ret = 0;
+    if(mbtk_ifc_open()) {
+        LOGE("mbtk_ifc_open() fail.");
+        ret = -1;
+        goto return_result;
+    }
+
+    if(mbtk_ifc_get_addr(dev_name, addr)) {
+        LOGE("mbtk_ifc_get_addr() fail.");
+        ret = -1;
+        goto return_result;
+    }
+
+return_result:
+    mbtk_ifc_close();
+    return ret;
+}
+
 static void voip_playback_thread(void *arg)
 {
     UNUSED(arg);
@@ -522,18 +543,36 @@
     return -1;
 }
 
-static int rtp_udp_cli_open(const char *remote_addr, int remote_port)
+static int rtp_udp_cli_open(const char *vlan, const char *remote_addr, int remote_port)
 {
-    struct sockaddr_in dst_sa4, src_sa4;
-    if (inet_pton(AF_INET, "0.0.0.0", &src_sa4.sin_addr) > 0) {
-        src_sa4.sin_family = AF_INET;
-        src_sa4.sin_port = htons(0);
-        memset(&src_sa4.sin_zero, 0, sizeof(src_sa4.sin_zero));
-    } else {
-        LOGE("Set src addr fail.");
+    int fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(fd < 0){
+        LOGE("socket() fail.[%d]", errno);
         return -1;
     }
 
+#if 0
+    struct sockaddr_in src_sa4;
+    memset(&src_sa4, 0, sizeof(src_sa4));
+    src_sa4.sin_family = AF_INET;
+    src_sa4.sin_port = htons(0);
+    src_sa4.sin_addr.s_addr = inet_addr("127.0.0.1");
+
+    if (bind(fd, (struct sockaddr*) &src_sa4, sizeof(src_sa4)) < 0) {
+        LOGE("bind() failed: %d", errno);
+        goto result_fail_with_close;
+    }
+#else
+    if(strlen(vlan) > 0) {
+        if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
+                       vlan, strlen(vlan)) < 0) {
+            LOGE("setsockopt(SO_BINDTODEVICE) failed");
+            return -1;
+        }
+    }
+#endif
+
+    struct sockaddr_in dst_sa4;
     if (inet_pton(AF_INET, remote_addr, &dst_sa4.sin_addr) > 0) {
         dst_sa4.sin_family = AF_INET;
         dst_sa4.sin_port = htons(remote_port);
@@ -543,17 +582,6 @@
         return -1;
     }
 
-    int fd = socket(AF_INET, SOCK_DGRAM, 0);
-    if(fd < 0){
-        LOGE("socket() fail.[%d]", errno);
-        return -1;
-    }
-
-    if (bind(fd, (struct sockaddr*) &src_sa4, sizeof(src_sa4)) < 0) {
-        LOGE("bind() failed: %d", errno);
-        goto result_fail_with_close;
-    }
-
     if (connect(fd, (struct sockaddr*) &dst_sa4, sizeof(dst_sa4)) < 0) {
         LOGE("connect() failed: %d", errno);
         goto result_fail_with_close;
@@ -726,7 +754,7 @@
     }
 
     LOGD("Start open UDP client : %s-%d", conf_info->remote_ip, conf_info->server_port);
-    rtp_info.udp_send_sock.fd = rtp_udp_cli_open(conf_info->remote_ip, conf_info->server_port);
+    rtp_info.udp_send_sock.fd = rtp_udp_cli_open(conf_info->vlan, conf_info->remote_ip, conf_info->server_port);
     if(rtp_info.udp_send_sock.fd < 0) {
         LOGE("Can not connected to %s:%d [errno-%d].", conf_info->remote_ip, conf_info->server_port, errno);
         goto error;