Am Freitag, 17. Mai 2011, 22:04:07 schrieb Peter Wagner:
> accidently hit the send button...
> 
> Hi,
> 
> i created a c++ program and while testing it (it sends upd packets) i
> created a few millions packages and sent them to 192.168.1.1:4950 (my
> router running openwrt). its a wl500gP v1. while i was doing this the
> device gets unresponsive and i get lines like this:
> 
> b44 ssb0:0: eth0: powering down PHY
> b44 ssb0:0: eth0: powering down PHY
> b44 ssb0:0: eth0: powering down PHY
> 
> after doing this for about 2 minutes the device reboots. i think this is
> triggered by the watchdog as it get no enough process time from the
> sheduler.
> 
> how can i track down why this powering down PHY happens?
> 
> regards
> Peter
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

i created this little c program (the code flys around somewhere in the inet) 
and modified it a bit it sends 100000000 udp packets to a host you specify
compile with gcc -o foo talker_foo.c
and run 
./foo $hostname $message_that_gets_sent

i can reproduce the error in ~10sec of running this program against a wl500gp 
kernel 2.6.39.1
after this 10sec i have about 160 lines like this
b44 ssb0:0: eth0: powering down PHY
in the output of dmesg.

i tested it against an unfiltered port.

greets

/*
** talker.c -- a datagram "client" demo
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#define SERVERPORT "4950"	// the port users will be connecting to

int main(int argc, char *argv[])
{
	int sockfd;
	struct addrinfo hints, *servinfo, *p;
	int rv;
	int numbytes;

	if (argc != 3) {
		fprintf(stderr,"usage: talker hostname message\n");
		exit(1);
	}

	memset(&hints, 0, sizeof hints);
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_DGRAM;

	if ((rv = getaddrinfo(argv[1], SERVERPORT, &hints, &servinfo)) != 0) {
		fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
		return 1;
	}

	// loop through all the results and make a socket
	for(p = servinfo; p != NULL; p = p->ai_next) {
		if ((sockfd = socket(p->ai_family, p->ai_socktype,
				p->ai_protocol)) == -1) {
			perror("talker: socket");
			continue;
		}

		break;
	}

	if (p == NULL) {
		fprintf(stderr, "talker: failed to bind socket\n");
		return 2;
	}
	int i;
	for (i=0; i<100000000;i++)
	{
		if ((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0,
			 p->ai_addr, p->ai_addrlen)) == -1) {
				perror("talker: sendto");
				exit(1);
		}
	}
	
	freeaddrinfo(servinfo);
	printf("talker: sent %d bytes to %s\n", numbytes, argv[1]);
	close(sockfd);

	return 0;
}
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to