Пример #1
0
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);
}
Пример #2
0
Файл: hcd.c Проект: jhbsz/cpe-1
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();   
	}	
}
Пример #3
0
Файл: hcd.c Проект: jhbsz/cpe-1
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;
}
Пример #4
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();   
	}	
}
Пример #5
0
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;
}
Пример #6
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;
}