int inband_remote_cmd(unsigned char *cmd) { unsigned char *buf; unsigned int channel = -1; channel = inband_open(INBAND_INTF,INBAND_SLAVE,INBAND_IOCTL_TYPE,INBAND_DEBUG); if( channel < 0 || inband_write(channel, get_random(65535), sycall_cmd_type, cmd, strlen(cmd), 0) < 0) { printf("inband sent remote command failed\n"); }/* else { if( inband_rcv_data(channel, &syscall_cmd_type, &buf, -1) < 0 ) printf("inband try to receive respone but failed\n"); inband_close(channel); }*/ inband_close(channel); }
int main(int argc, char *argv[]) { int pid_fd, pid, scr; char tmpbuf[100]; int chan; /* INBAND_HOST ---> */ if (parse_argument(argc, argv) != 0) return 0; // printf("%s,%d, ****************\n",__FUNCTION__,__LINE__); // create pid file pid_fd = pidfile_acquire(PID_FILE); if (pid_fd < 0) { printf("Create PID file failed!\n"); return 0; } pidfile_write_release(pid_fd); DISPLAY_BANNER; // register signal handler #ifdef CMD_LINE signal(SIGUSR2, manual_cmd_handler); #endif signal(SIGCHLD, sigchld_handler); chan = inband_open(INBAND_NETIF,NULL,ETH_P_RTK,INBAND_DEBUG); if(chan < 0) { printf(" inband_open failed!\n"); return -1; } else hcd_inband_chan = chan; //event_channel = inband_open(INBAND_INTF,NULL,INBAND_EVENT_TYPE,INBAND_DEBUG); //if( event_channel < 0 ) // return -1; while(1){ inband_wait_event(); } }
static int notif_host(void) { int i, ret,fd; int chan; unsigned int seq=0; char *data; char *buf_p,rx_cmd_type; int count; struct stat ffstat; int flen=0,len; chan = inband_open(INBAND_NETIF,"00e04c8196c1",ETH_P_RTK_NOTIFY,INBAND_DEBUG); if (chan < 0) { printf("open inband failed!\n"); return -1; } inband_close(chan); return 0; }
int main(int argc, char *argv[]) { int pid_fd, pid, scr; char tmpbuf[100]; int chan; /* INBAND_HOST ---> */ struct iwreq wrq; /* INBAND_HOST <--- */ if (parse_argument(argc, argv) != 0) return 0; // become daemon if (daemon(0,1) == -1) { printf("fork daemon error!\n"); return 0; } // create pid file pid_fd = pidfile_acquire(PID_FILE); if (pid_fd < 0) { printf("Create PID file failed!\n"); return 0; } pidfile_write_release(pid_fd); DISPLAY_BANNER; // initialize mib init_config_mib(); // register signal handler #ifdef CMD_LINE signal(SIGUSR2, manual_cmd_handler); #endif signal(SIGCHLD, sigchld_handler); // open mdio driver #ifdef RTK_NFBI_AP_HCM mdio_fd = open(DEV_NAME, O_RDWR); if (!mdio_fd) { printf("open driver failed!\n"); return 1; } #endif init_bridge(); bring_up_lan(); bring_up_br(); sleep(1); chan = inband_open(INBAND_NETIF,NULL,ETH_P_RTK,INBAND_DEBUG); if(chan < 0) { printf(" inband_open failed!\n"); return -1; } else hcd_inband_chan = chan; // Set daemon pid to driver. // When this ioctl is set, driver will set AllSoftwareReady bit to 'CPU System Status' Register pid = getpid(); #ifdef RTK_NFBI_AP_HCM if (do_mdio_ioctl(id_set_host_pid, (void *)&pid)) //mark_issue , if it is need then mdio_open must be done return 1; #endif ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); if (ioctl_sock < 0) { perror("socket[PF_INET,SOCK_DGRAM]"); return -1; } /* INBAND_HOST ---> */ /* Get wireless name */ memset(wrq.ifr_ifrn.ifrn_name, 0, sizeof wrq.ifr_ifrn.ifrn_name); strncpy(wrq.ifr_ifrn.ifrn_name, "wlan0", IFNAMSIZ); pid = getpid(); wrq.u.data.pointer = (caddr_t)&pid; wrq.u.data.length = sizeof(pid_t); if(ioctl(ioctl_sock, SIOCSAPPPID, &wrq) < 0) { // If no wireless name : no wireless extensions return(-1); } event_channel = inband_open(INBAND_INTF,INBAND_HOST,INBAND_EVENT_TYPE,INBAND_DEBUG); if( event_channel < 0 ) return -1; signal(SIGIO, notify_host); /* INBAND_HOST <--- */ //init_system(INIT_ALL); //mark_debug while(1){ inband_wait_event(); } }
static int notif_host(void) { int i, ret,fd; int chan; unsigned int seq=0; char *data; char *buf_p,rx_cmd_type; int count; struct stat ffstat; int flen=0,len; chan = inband_open(INBAND_NETIF,"00e04c8196c1",ETH_P_RTK_NOTIFY,INBAND_DEBUG); if (chan < 0) { printf("open inband failed!\n"); return -1; } fd = open(WPS_CONF, O_RDONLY); if (fd < 0) { printf("Cannot Open file %s!\n", WPS_CONF); return -1; } fstat(fd, &ffstat); flen = ffstat.st_size; printf("flen = %d \n",flen); if((data = (char *)malloc(flen)) == NULL) { printf("data buffer allocation failed!\n"); return -1; } ret = read(fd, data, flen); if (ret != flen) { printf("Reading error\n"); free(data); //need free before return!!!!! return -1; } close(fd); len = flen; ret = inband_write(chan,0,0,data,len,0); //send request free(data); //need free before return!!!!! count = inband_rcv_data(chan,&rx_cmd_type,&buf_p,3); //return data length if(count < 0) { ret=-1; DEBUG_ERR("wps notify fail\n"); } if( (rx_cmd_type == 0) ) DEBUG_ERR("wps notify ok!\n"); else { ret=-1; DEBUG_ERR("wps notify fail!\n"); } inband_close(chan); return 0; }
static int init_socket(struct network_info_t *network_info, int type) { int flags; struct ioh_class *ioh_ptr; switch(type){ case 1: network_info->channel = inband_open(INTERFACE,SLAVE_MAC,ETH_P_RTK_NOTIFY,0); break; /* case 2: network_info->channel = inband_open(INTERFACE,DEST_MAC,ETH_P_RTK_NOTIFY,0); //network_info->channel = inband_open(INTERFACE,DEST_MAC,ETH_P_RTK,0); //ioh_ptr = get_chan_obj(network_info->channel); network_info->inband_sock = get_inband_socket(network_info->channel); network_info->radsrvaddr.sin_family = PF_INET; network_info->radsrvaddr.sin_port = htons( RADIUS_PORT ); network_info->radsrvaddr.sin_addr.s_addr = inet_addr( RADIUS_IP ); memset( &network_info->localaddr, 0, sizeof(network_info->localaddr)); network_info->localaddr.sin_family = AF_INET; network_info->localaddr.sin_addr.s_addr = htonl(INADDR_ANY); network_info->localaddr.sin_port = htons(0); network_info->udpsock = socket( PF_INET, SOCK_DGRAM, IPPROTO_UDP); if ( network_info->udpsock == -1 ){ debug_message("lib1x_nal_initialize: Could not open Radius Authentication UDP socket !"); goto err_out; } if ( bind( network_info->udpsock, (struct sockaddr *) &network_info->localaddr, sizeof(network_info->localaddr)) != 0){ debug_message("Could not BIND Authentication server UDP socket."); goto err_out; } // wait till succeed while (1) { if (connect( network_info->udpsock, (struct sockaddr *)&network_info->radsrvaddr, sizeof(network_info->radsrvaddr) ) != 0 ) { debug_message("lib1x_nal_connect: Could not connect to Authentication Server . "); sleep(1); } else { debug_message("Radius connected !!!\n"); break; } } flags = fcntl(network_info->udpsock, F_GETFL ); if ( fcntl( network_info->udpsock, F_SETFL, flags | O_NONBLOCK) != 0 ) { debug_message("lib1x_nal_connect : FCNTL failed on UDP socket" ); goto err_out; } break; */ default: debug_message("Unknown usage type!!\n"); goto err_out; } return 0; err_out: return -1; }