Пример #1
0
int nettest_main(int argc, char *argv[])
#endif
{
	int mode = 0;
	nettest_proto_e proto = NT_NONE;
	int num_packets_to_process = 0;
	uint32_t interval = 0;
	/* pps - packet per second, default value 1 */
	uint32_t pps = 1;

	if (argc < 6) {
		goto err_with_input;
	}

	mode = atoi(argv[1]);
	if (mode != NETTEST_SERVER_MODE && mode != NETTEST_CLIENT_MODE) {
		goto err_with_input;
	}

	if (strlen(argv[2]) != strlen(NETTEST_PROTO_TCP)) {
		goto err_with_input;
	}
	if (!strncmp(argv[2], NETTEST_PROTO_TCP, strlen(NETTEST_PROTO_TCP) + 1)) {
		proto = NT_TCP;
	} else if (!strncmp(argv[2], NETTEST_PROTO_UDP, strlen(NETTEST_PROTO_UDP) + 1)) {
		proto = NT_UDP;
	} else if (!strncmp(argv[2], NETTEST_PROTO_BROADCAST, strlen(NETTEST_PROTO_BROADCAST) + 1)) {
		proto = NT_BROADCAST;
	} else if (!strncmp(argv[2], NETTEST_PROTO_MULTICAST, strlen(NETTEST_PROTO_MULTICAST) + 1)) {
		proto = NT_MULTICAST;
	} else {
		goto err_with_input;
	}

	g_app_target_addr = argv[3];
	g_app_target_port = atoi(argv[4]);
	num_packets_to_process = atoi(argv[5]);
	if (num_packets_to_process < 0 || num_packets_to_process > NETTEST_MAX_PACKETS) {
		goto err_with_input;
	}

	if (mode == NETTEST_SERVER_MODE) {
		if (proto == NT_TCP) {
			tcp_server_thread(num_packets_to_process);
		} else if (proto == NT_UDP) {
			udp_server_thread(num_packets_to_process);
		} else if (proto == NT_BROADCAST) {
			broadcast_receive(num_packets_to_process);
		} else if (proto == NT_MULTICAST) {
			if (argc != 7) {
				goto err_with_input;
			}
			ipmcast_receiver_thread(num_packets_to_process, argv[6]);
		}
	} else if (mode == NETTEST_CLIENT_MODE) {
		if (argc < 7) {
			goto err_with_input;
		}
		/* get interval */
		pps = atoi(argv[6]);
		if (pps <= 0) {
			goto err_with_input;
		}
		interval = 1000000ul / pps; /* sleep interval */

		if (proto == NT_TCP) {
			tcp_client_thread(num_packets_to_process, interval);
		} else if (proto == NT_UDP) {
			udp_client_thread(num_packets_to_process, interval);
		} else if (proto == NT_BROADCAST) {
			broadcast_send(num_packets_to_process, interval);
		} else if (proto == NT_MULTICAST) {
			if (argc != 8) {
				goto err_with_input;
			}
			ipmcast_sender_thread(num_packets_to_process, interval, argv[7]);
		}
	}
	printf("Exiting nettest_main thread, job finished\n");
	return 0;

err_with_input:
	show_usage();
	return -1;
}
Пример #2
0
/*---------------------------------------------------------------------------*/
int main(void)
{   
    uint16_t rval;     

    /* init hardware layer */
    init_hci();
    timer1_init();
    init_serial();    
    sei();

    led1_high();
    led2_high();

    /* init protothreads */
    PT_INIT(&blink_pt);    
    PT_INIT(&nrf24_pt);
    PT_INIT(&www_client_pt);
    PT_INIT(&www_server_pt);
    PT_INIT(&udp_server_pt);
    PT_INIT(&coap_server_pt);    
    PT_INIT(&temperature_pt);
    PT_INIT(&udp_broadcast_pt);

    /* greeting message */
    dbg(PSTR("> Hello World!\r\n"));   

    /* init the ethernet chip */
    enc28j60Init(mymac);        
    enc28j60PhyWrite(PHLCON,0x476);
    
    /* get automatic IP */
    rval=0;
    init_mac(mymac);        
    while(rval==0)
    {
        plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
        rval=packetloop_dhcp_initial_ip_assignment(buf,plen,mymac[5]);
    }
    dhcp_get_my_ip(myip,netmask,gwip); 
    client_ifconfig(myip,netmask);
    
    /* learn the MAC address of the gateway */
    get_mac_with_arp(gwip,0,&arpresolver_result_callback);
    while(get_mac_with_arp_wait())
    {        
        plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
        packetloop_arp_icmp_tcp(buf,plen);
    }
    
    /* set WWW server port */
    www_server_port(MYWWWPORT);        
    
    dbg(PSTR("> System is ready.\r\n"));   

    led1_low();
    led2_low();

    /* main loop */
    while(1)
    {    
        if(enc28j60linkup())
        {            
            /* poll hardware ethernet buffer */
            plen = enc28j60PacketReceive(BUFFER_SIZE,buf);     
            
            /* terminate the buffer */
            buf[BUFFER_SIZE]='\0';

            /* handle DHCP messages if neccessary */
            plen = packetloop_dhcp_renewhandler(buf,plen);

            /* handle and analyse the packet slightly */
            dat_p = packetloop_arp_icmp_tcp(buf,plen);

            if( dat_p == 0)
            {
                udp_client_check_for_dns_answer(buf,plen);
            } 

            new_packet = 0xFF;
            
            PT_SCHEDULE(blink_thread(&blink_pt));      
            PT_SCHEDULE(nrf24_thread(&nrf24_pt));                  
            PT_SCHEDULE(www_server_thread(&www_server_pt));
            PT_SCHEDULE(udp_server_thread(&udp_server_pt));
            PT_SCHEDULE(www_client_thread(&www_client_pt));
            PT_SCHEDULE(coap_server_thread(&coap_server_pt));
            PT_SCHEDULE(temperature_thread(&temperature_pt));
            PT_SCHEDULE(udp_broadcast_thread(&udp_broadcast_pt));
        }
    }    
    return 0;
}