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
> [email protected]
> 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
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel