Fix mbtk from v1265 GSW

Change-Id: I5d8d395616f284bc74c8b9448cfa347164b5a668
diff --git a/mbtk/test/libgsw_lib/gsw_data_test.c b/mbtk/test/libgsw_lib/gsw_data_test.c
new file mode 100755
index 0000000..6efa383
--- /dev/null
+++ b/mbtk/test/libgsw_lib/gsw_data_test.c
@@ -0,0 +1,365 @@
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+//gsw include
+
+
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+#define GSW_NW_OPERATION_NAME_LEN 128
+#define GSW_NW_PLMN_LEN 6
+#define GSW_NW_MCC_LEN 3
+#define GSW_NW_MNC_LEN 3
+#define GSW_NW_PARA_MAX_LEN 128
+#define GSW_MCC_MAX_LEN 16
+#define GSW_MNC_MAX_LEN 16
+#define GSW_APN_CHANNEL_MAX 10
+#define GSW_POXY_ADDR_MAX_LEN 64
+#define GSW_PDP_TYPE_MAX_LEN 16
+#define GSW_APN_MAX_LEN 32
+#define GSW_APN_ID_MAX_LEN 32
+#define GSW_APN_TYPE_MAX_LEN 50
+#define GSW_USR_MAX_LEN 16
+#define GSW_PWD_MAX_LEN 16
+#define GSW_AUTH_TYPE_MAX_LEN 50
+#define GSW_PROTOCO_MAX_LEN 64
+#define GSW_CARRIER_ID_MAX_LEN 64
+#define GSW_IFACE_NAME_MAX_LEN 50
+#define GSW_PDP_ADDR_MAX_LEN 64
+#define GSW_DNS_ADDR_MAX_LEN 64
+#define GSW_GETWAYS_ADDR_MAX_LEN 64
+#define GSW_RSP_MAX_LEN 256
+
+typedef struct {
+    int handle;   /**< data connection handle*/
+    int cid;   /**< data connection cid*/
+    int state;   /**< data connection state*/
+    int fail_cause;   /**< data connection fail cause*/
+    char *type;   /**< data connection type*/
+    char *ifname;   /**< ifname*/
+
+    char *v4_ip;   /**< ipv4 address*/
+    char *v4_pdns;   /**< ipv4 pdns address*/
+    char *v4_sdns;   /**< ipv4 sdns address*/
+    char *v4_gw;   /**< ipv4 gateway  address*/
+
+    char *v6_ip;   /**< ipv6 address*/
+    char *v6_pdns;   /**< ipv6 gateway  address*/
+    char *v6_sdns;   /**< ipv6 gateway  address*/
+}Wan_State_ind_s;
+
+typedef struct {
+    char ip[GSW_PDP_ADDR_MAX_LEN];   /**< ip address */
+    char pdns[GSW_DNS_ADDR_MAX_LEN];   /**< pdns address*/
+    char sdns[GSW_DNS_ADDR_MAX_LEN];   /**< sdns address*/
+    char gw[GSW_GETWAYS_ADDR_MAX_LEN];   /**< gate way address*/
+}V4_Addr_s;
+
+typedef struct {
+    char ip[GSW_PDP_ADDR_MAX_LEN];   /**< ip address*/
+    char pdns[GSW_DNS_ADDR_MAX_LEN];   /**< pdns address*/
+    char sdns[GSW_DNS_ADDR_MAX_LEN];   /**< sdns address*/
+}V6_Addr_s;
+
+typedef struct {
+    int handle;        /**< data connection handle*/
+
+    /* req info */
+    char mcc[GSW_MCC_MAX_LEN];   /**< apn mcc value*/
+    char mnc[GSW_MNC_MAX_LEN];   /**< apn mnc value*/
+    char apnid[GSW_APN_ID_MAX_LEN];   /**< apn id*/
+    char apn[GSW_APN_MAX_LEN];   /**< apn name*/
+    char apnType[GSW_APN_TYPE_MAX_LEN];   /**< apn type ipv4 ipv4v6 ipv6*/
+    char usr[GSW_USR_MAX_LEN];   /**< apn usr name*/
+    char pwd[GSW_PWD_MAX_LEN];   /**< apn password*/
+    char authType[GSW_AUTH_TYPE_MAX_LEN];   /**< apn auth type*/
+    char normalProtocol[GSW_PROTOCO_MAX_LEN];   /**< apn auth protoco*/
+    char roamingProtocol[GSW_PROTOCO_MAX_LEN];   /**< apn auth protoco roaming*/
+    char carrier[GSW_CARRIER_ID_MAX_LEN];   /**< carrier id*/
+
+    /* rsp */
+    int cid;   /**< data connection cid for mdm sdk*/
+    int active;   /**< pdn context active state: 2,actived; other,not active */
+    char ifname[GSW_IFACE_NAME_MAX_LEN];   /**< if name of current datalink */
+    int type;   /**< data connection type*/
+    V4_Addr_s v4;   /**< ipv4 addr*/
+    V6_Addr_s v6;   /**< ipv6 addr*/
+    int mtu;   /**< mtu value*/
+
+    char out[GSW_RSP_MAX_LEN];   /**< sdk return value*/
+}Link_Info_s;
+
+typedef struct
+{
+       uint64_t  tx_pkts;     /*  the number of packet sent*/
+       uint64_t  tx_bytes;     /*  the number of packet sent bytes */
+       uint64_t  tx_dropped_pkts;     /*  the number of packet  dropped by sent*/
+       uint64_t  rx_pkts;     /*  the number of packet received*/
+       uint64_t  rx_bytes;     /*  the number of packet receivedbytes */
+       uint64_t  rx_dropped_pkts;     /*  the number of packet  dropped by received*/
+}gsw_data_pkt_stats;
+
+
+typedef void (*gsw_data_call_evt_cb_t)(Wan_State_ind_s *linkState);
+
+int (*gsw_data_call_init)(gsw_data_call_evt_cb_t evt_cb);
+int (*gsw_data_call_deinit)(void);
+int (*gsw_data_call_set_apn)(Link_Info_s *LinkInf);
+int (*gsw_data_call_connect)(int linkid, Link_Info_s *LinkInf);
+int (*gsw_data_call_disconnect)(int linkid, Link_Info_s *LinkInf);
+int (*gsw_get_data_call_pkt_stats)(int linkid, gsw_data_pkt_stats *data_pkt);
+
+#define lib_gsw_data_path "/lib/libgsw_lib.so"
+static void *dlHandle_data = NULL;
+
+
+static int gsw_data_api_import()
+{
+    dlHandle_data = dlopen(lib_gsw_data_path, RTLD_NOW);
+    if (dlHandle_data == NULL) {
+        printf("error: %s\n", dlerror());
+        return -1;
+    }
+
+    gsw_data_call_init = (int (*) (gsw_data_call_evt_cb_t evt_cb))dlsym(dlHandle_data, "gsw_data_call_init");
+    if (gsw_data_call_init == NULL) {
+        printf("gsw_data_call_init dlsym failed\n");
+        return -1;
+    }
+
+    gsw_data_call_deinit = (int (*) (void))dlsym(dlHandle_data, "gsw_data_call_deinit");
+    if (gsw_data_call_deinit == NULL) {
+        printf("gsw_data_call_deinit dlsym failed\n");
+        return -1;
+    }
+
+    gsw_data_call_set_apn = (int (*)(Link_Info_s *LinkInf))dlsym(dlHandle_data, "gsw_data_call_set_apn");
+    if (gsw_data_call_set_apn == NULL) {
+        printf("gsw_data_call_set_apn dlsym failed\n");
+        return -1;
+    }
+
+    gsw_data_call_connect = (int (*)(int linkid, Link_Info_s *LinkInf))dlsym(dlHandle_data, "gsw_data_call_connect");
+    if (gsw_data_call_connect == NULL) {
+        printf("gsw_data_call_connect dlsym failed\n");
+        return -1;
+    }
+
+    gsw_data_call_disconnect = (int (*)(int linkid, Link_Info_s *LinkInf))dlsym(dlHandle_data, "gsw_data_call_disconnect");
+    if (gsw_data_call_disconnect == NULL) {
+        printf("gsw_data_call_disconnect dlsym failed\n");
+        return -1;
+    }
+
+    gsw_get_data_call_pkt_stats = (int (*)(int linkid, gsw_data_pkt_stats *data_pkt))dlsym(dlHandle_data, "gsw_get_data_call_pkt_stats");
+    if (gsw_get_data_call_pkt_stats == NULL) {
+        printf("gsw_get_data_call_pkt_stats dlsym failed\n");
+        return -1;
+    }
+
+    return 0;
+}
+
+void gsw_data_call_back(Wan_State_ind_s *linkState)
+{
+    printf("gsw_data_call_back, handle = %d\n", linkState->handle);
+    printf("gsw_data_call_back, cid = %d\n", linkState->cid);
+    printf("gsw_data_call_back, state = %d\n", linkState->state);
+    printf("gsw_data_call_back, fail_cause = %d\n", linkState->fail_cause);
+    printf("gsw_data_call_back, type = %s\n", linkState->type);
+    printf("gsw_data_call_back, ifname = %s\n", linkState->ifname);
+    printf("gsw_data_call_back, v4_ip = %s\n", linkState->v4_ip);
+    printf("gsw_data_call_back, v4_pdns = %s\n", linkState->v4_pdns);
+    printf("gsw_data_call_back, v4_sdns = %s\n", linkState->v4_sdns);
+    printf("gsw_data_call_back, v4_gw = %s\n", linkState->v4_gw);
+    printf("gsw_data_call_back, v6_ip = %s\n", linkState->v6_ip);
+    printf("gsw_data_call_back, v6_pdns = %s\n", linkState->v6_pdns);
+    printf("gsw_data_call_back, v6_sdns = %s\n", linkState->v6_sdns);
+}
+
+
+void dump_items()
+{
+
+    printf("\n");
+    printf("The current module is: data \n");
+
+    printf("-------------------------------------------------------------------------\n");
+    printf("|  index | function name                                              |\n");
+    printf("|  0       exit\n");
+    printf("   1       gsw_data_call_init\n");
+    printf("   2       gsw_data_call_deinit\n");
+    printf("   3       gsw_data_call_set_apn\n");
+    printf("   4       gsw_data_call_connect\n");
+    printf("   5       gsw_data_call_disconnect\n");
+    printf("   6       gsw_get_data_call_pkt_stats\n");
+    printf("-------------------------------------------------------------------------\n");
+}
+
+int main()
+{
+    int ret;
+    char operator[10];
+    int opt;
+
+    Link_Info_s* pub_LinkInf = (Link_Info_s*)malloc(sizeof(Link_Info_s));
+    memset(pub_LinkInf, 0x0, sizeof(Link_Info_s));
+
+    Link_Info_s* pri_LinkInf = (Link_Info_s*)malloc(sizeof(Link_Info_s));
+    memset(pri_LinkInf, 0x0, sizeof(Link_Info_s));
+
+    pub_LinkInf->handle = 0;
+    strcpy(pub_LinkInf->mcc,"460");
+    strcpy(pub_LinkInf->mnc,"11");
+    strcpy(pub_LinkInf->apn,"pub_apn");
+    strcpy(pub_LinkInf->apnid,"pub_apnid");
+    strcpy(pub_LinkInf->apnType,"default");
+    strcpy(pub_LinkInf->usr,"");
+    strcpy(pub_LinkInf->pwd,"");
+    strcpy(pub_LinkInf->authType,"0");
+    strcpy(pub_LinkInf->normalProtocol,"IPV4V6");
+    strcpy(pub_LinkInf->roamingProtocol,"IPV4V6");
+    strcpy(pub_LinkInf->carrier,"CHINA TELECOM");
+
+    pri_LinkInf->handle = 1;
+    strcpy(pri_LinkInf->mcc,"460");
+    strcpy(pri_LinkInf->mnc,"11");
+    strcpy(pri_LinkInf->apn,"pri_apn");
+    strcpy(pri_LinkInf->apnid,"pri_apnid");
+    strcpy(pri_LinkInf->apnType,"mms");
+    strcpy(pri_LinkInf->usr,"");
+    strcpy(pri_LinkInf->pwd,"");
+    strcpy(pri_LinkInf->authType,"0");
+    strcpy(pri_LinkInf->normalProtocol,"IPV4V6");
+    strcpy(pri_LinkInf->roamingProtocol,"IPV4V6");
+    strcpy(pri_LinkInf->carrier,"CHINA TELECOM");
+
+
+    ret = gsw_data_api_import();
+    if (ret != 0) {
+        printf("gsw_data_api_import failed \n");
+        free(pub_LinkInf);
+        free(pri_LinkInf);
+        return -1;
+    }
+    
+
+    while(1)
+    {
+        dump_items();
+        printf("input the index of module: ");
+        opt = -1;
+        printf("%s/n",fgets(operator, sizeof(operator), stdin));
+        fflush(stdin);
+
+        opt = atoi(operator);
+        switch (opt) {
+            case 0:
+            {
+                printf("exit\n");
+                free(pub_LinkInf);
+                free(pri_LinkInf);
+                return 0;
+            }
+            
+            case 1:
+            {
+                printf("gsw_data_call_init start\n");
+                ret = gsw_data_call_init(gsw_data_call_back);
+                if (ret != 0) {
+                    printf("gsw_data_call_init failed,ret = %d\n",ret);
+                    continue;
+                }
+                printf("gsw_data_call_init success\n");
+                break;
+            }
+
+            case 2:
+            {
+                printf("gsw_data_call_deinit start\n");
+                ret = gsw_data_call_deinit();
+                if (ret != 0) {
+                    printf("gsw_data_call_deinit failed,ret = %d\n",ret);
+                    continue;
+                }
+                printf("gsw_data_call_deinit success\n");
+                break;
+            }
+            case 3:
+            {
+                printf("gsw_data_call_set_apn start\n");
+                ret = gsw_data_call_set_apn(pub_LinkInf);
+                if (ret != 0) {
+                    printf("gsw_data_call_set_apn failed,ret = %d\n",ret);
+                    continue;
+                }
+                printf("gsw_data_call_set_apn success\n");
+                break;
+            }
+
+            case 4:
+            {
+                printf("gsw_data_call_connect start\n");
+                ret = gsw_data_call_connect(pub_LinkInf->handle, pub_LinkInf);
+                if (ret != 0) {
+                    printf("gsw_data_call_connect failed, ret = %d\n",ret);
+                    continue;
+                }
+                printf("gsw_data_call_connect success\n");
+                break;
+            }
+
+            case 5:
+            {
+                printf("gsw_data_call_disconnect start\n");
+                ret = gsw_data_call_disconnect(pub_LinkInf->handle, pub_LinkInf);
+                if (ret != 0) {
+                    printf("gsw_data_call_disconnect failed,ret = %d\n",ret);
+                    continue;
+                }
+                printf("gsw_data_call_disconnect success\n");
+                break;
+            }
+
+            case 6:
+            {
+                printf("gsw_get_data_call_pkt_stats start\n");
+                gsw_data_pkt_stats* data_pkt = (gsw_data_pkt_stats*)malloc(sizeof(gsw_data_pkt_stats));
+                memset(data_pkt, 0x0, sizeof(gsw_data_pkt_stats));
+                ret = gsw_get_data_call_pkt_stats(pub_LinkInf->handle, data_pkt);
+                if (ret != 0) {
+                    printf("gsw_get_data_call_pkt_stats failed,ret = %d\n",ret);
+                    continue;
+                }
+                else
+                {
+                    printf("gsw_get_data_call_pkt_stats success \n");
+                    printf("txPkts = %llu\n", data_pkt->tx_pkts);
+                    printf("txbytes = %llu\n", data_pkt->tx_bytes);
+                    printf("tx_dropped_pkts = %llu\n", data_pkt->tx_dropped_pkts);
+                    printf("rxPkts = %llu\n", data_pkt->rx_pkts);
+                    printf("rxbytes = %llu\n", data_pkt->rx_bytes);
+                    printf("rx_dropped_pkts = %llu\n", data_pkt->rx_dropped_pkts);
+                    free(data_pkt);
+                }
+                printf("gsw_get_data_call_pkt_stats success\n");
+                break;
+            }
+
+            default:
+            {
+                continue;
+            }
+        }
+    }
+}
+
+