xref: /OK3568_Linux_fs/yocto/meta-rockchip/recipes-devtools/brcm-tools/files/dhd_priv.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun 
2*4882a593Smuzhiyun #include <stdio.h>
3*4882a593Smuzhiyun #include <stdlib.h>
4*4882a593Smuzhiyun #include <string.h>
5*4882a593Smuzhiyun #include <sys/types.h>
6*4882a593Smuzhiyun #include <sys/socket.h>
7*4882a593Smuzhiyun #include <netinet/in.h>
8*4882a593Smuzhiyun #include <sys/ioctl.h>
9*4882a593Smuzhiyun #include <linux/socket.h>
10*4882a593Smuzhiyun #include <netpacket/packet.h>
11*4882a593Smuzhiyun #include <net/if.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define VERSION	"1.2"
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define TAG "dhd_priv: "
16*4882a593Smuzhiyun #if defined(ANDROID)
17*4882a593Smuzhiyun #include <signal.h>
18*4882a593Smuzhiyun #include <unistd.h>
19*4882a593Smuzhiyun #include <errno.h>
20*4882a593Smuzhiyun #include <fcntl.h>
21*4882a593Smuzhiyun #include "cutils/misc.h"
22*4882a593Smuzhiyun #include "cutils/log.h"
23*4882a593Smuzhiyun #define DHD_PRINTF(...) {__android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__); printf(__VA_ARGS__);}
24*4882a593Smuzhiyun #else
25*4882a593Smuzhiyun #define DHD_PRINTF printf
26*4882a593Smuzhiyun #endif
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun typedef struct dhd_priv_cmd {
29*4882a593Smuzhiyun 	char *buf;
30*4882a593Smuzhiyun 	int used_len;
31*4882a593Smuzhiyun 	int total_len;
32*4882a593Smuzhiyun } dhd_priv_cmd;
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /*
35*4882a593Smuzhiyun terence 20161127
36*4882a593Smuzhiyun */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun int
main(int argc,char ** argv)39*4882a593Smuzhiyun main(int argc, char **argv)
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun 	struct ifreq ifr;
42*4882a593Smuzhiyun 	dhd_priv_cmd priv_cmd;
43*4882a593Smuzhiyun 	int ret = 0;
44*4882a593Smuzhiyun 	int ioctl_sock; /* socket for ioctl() use */
45*4882a593Smuzhiyun 	char buf[500]="";
46*4882a593Smuzhiyun 	int i=0;
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	DHD_PRINTF(TAG "Version = %s\n", VERSION);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	DHD_PRINTF("argv: ");
51*4882a593Smuzhiyun 	while (argv[i]) {
52*4882a593Smuzhiyun 		DHD_PRINTF("%s ", argv[i]);
53*4882a593Smuzhiyun 		i++;
54*4882a593Smuzhiyun 	}
55*4882a593Smuzhiyun 	DHD_PRINTF("\n");
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	if (!argv[1]) {
58*4882a593Smuzhiyun 		DHD_PRINTF("Please input right cmd\n");
59*4882a593Smuzhiyun 		return 0;
60*4882a593Smuzhiyun 	}
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	while (*++argv) {
63*4882a593Smuzhiyun 		strcat(buf, *argv);
64*4882a593Smuzhiyun 		if (*(argv+1))
65*4882a593Smuzhiyun 			strcat(buf, " ");
66*4882a593Smuzhiyun 	}
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun 	ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
69*4882a593Smuzhiyun 	if (ioctl_sock < 0) {
70*4882a593Smuzhiyun 		DHD_PRINTF(TAG "socket(PF_INET,SOCK_DGRAM)\n");
71*4882a593Smuzhiyun 		return -1;
72*4882a593Smuzhiyun 	}
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	memset(&ifr, 0, sizeof(ifr));
75*4882a593Smuzhiyun 	memset(&priv_cmd, 0, sizeof(priv_cmd));
76*4882a593Smuzhiyun 	strncpy(ifr.ifr_name, "wlan0", sizeof(ifr.ifr_name));
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 	priv_cmd.buf = buf;
79*4882a593Smuzhiyun 	priv_cmd.used_len = 500;
80*4882a593Smuzhiyun 	priv_cmd.total_len = 500;
81*4882a593Smuzhiyun 	ifr.ifr_data = &priv_cmd;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	if ((ret = ioctl(ioctl_sock, SIOCDEVPRIVATE + 1, &ifr)) < 0) {
84*4882a593Smuzhiyun 		DHD_PRINTF(TAG "failed to issue private commands %d\n", ret);
85*4882a593Smuzhiyun 	} else {
86*4882a593Smuzhiyun 		DHD_PRINTF(TAG "buf = %s, len = %d, ret = %d\n", buf, strlen(buf), ret);
87*4882a593Smuzhiyun 	}
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	close(ioctl_sock);
90*4882a593Smuzhiyun 	return ret;
91*4882a593Smuzhiyun }
92*4882a593Smuzhiyun 
93