Small example program shut down urtwn
Adrian Chadd
adrian at freebsd.org
Tue Sep 6 04:47:59 UTC 2016
hm, interesting! I wonder if urtwn and/or usb is missing some bus
barriers for ARM or something?
-a
On 4 September 2016 at 14:18, Otacílio <otacilio.neto at bsd.com.br> wrote:
> Dears
>
> I wrote these two small programs to help debug a problem that I think I have
> found when using urtwn driver in a baglebone black. The problem is 100%
> reproducible.
>
> In a server machine I run:
>
> serverUDP 2508
>
> In beaglebone black I run:
>
> ./clientUDP servername 2508 9216 0
>
> All the times, after some packages be sent the urtwn interface do not
> respond from ping and stops send others packages. Some times this error
> message appears:
>
> % urtwn0: device timeout
>
> I have tested with RTL8192CU and RTL8188CUS
>
> The problem do no occurs in my notebook.
>
> Following the server and client
>
> #include <stdlib.h>
> #include <string.h>
> #include <arpa/inet.h>
> #include <netinet/in.h>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <unistd.h>
>
> #define BUFFER_LEN 1024*1024
>
> void diep(char *s)
> {
> perror(s);
> exit(1);
> }
>
> int main(int argc, char **argv)
> {
> int lidos;
> struct sockaddr_in si_me, si_other;
> int s, i, slen=sizeof(si_other);
> char buf[BUFFER_LEN];
> int aux;
>
> if(argc != 2){
> fprintf(stderr, "Voce deve usar %s <porta>\n", argv[0]);
> exit(1);
> }
>
> if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
> diep("socket");
>
> memset((char *) &si_me, 0, sizeof(si_me));
> si_me.sin_family = AF_INET;
> si_me.sin_port = htons(strtol(argv[1], (char **)NULL, 10));
> si_me.sin_addr.s_addr = htonl(INADDR_ANY);
> if (bind(s, (struct sockaddr *)&si_me, sizeof(si_me))==-1)
> diep("bind");
>
> i = 1;
> do {
> if ((lidos = recvfrom(s, buf, BUFFER_LEN, 0, (struct sockaddr
> *)&si_other, (socklen_t *)&slen))==-1)
> diep("recvfrom()");
> aux = ntohl(*(int*)&buf[0]);
> printf("Perdidos %d pacotes (%0.2f%%)\n", aux - i, 100*((float)(aux
> - i))/((float)aux));
> printf("Sequencia %0000d Recebidos %d bytes\n", aux, lidos);
> i++;
> }while(lidos>0);
>
> close(s);
> return 0;
> }
>
> #include <stdlib.h>
> #include <string.h>
> #include <arpa/inet.h>
> #include <netinet/in.h>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <unistd.h>
> #include <netinet/in.h>
> #include <netdb.h>
> #include <arpa/inet.h>
> #include <sys/select.h>
>
> #define SOCKET_ERROR -1
> #define INVALID_SOCKET -1
>
> #define SRV_IP "127.0.0.1"
>
> void diep(char *s)
> {
> perror(s);
> exit(1);
> }
>
>
> int main(int argc, char **argv)
> {
> struct sockaddr_in si_other;
> int s, i, slen=sizeof(si_other);
> char *buf;
> int tamanho;
> int npack;
> struct addrinfo *result = NULL,
> *ptr = NULL,
> hints;
> int iResult, aux;
> fd_set fdset;
>
> if(argc != 5){
> fprintf(stderr,"Voce deve usar %s <host> <porta> <tamanho> <numero
> de pacotes>\n", argv[0]);
> exit(1);
> }
>
> tamanho = (int)strtol(argv[3], (char **)NULL, 10);
> npack = (int)strtol(argv[4], (char **)NULL, 10);
>
> buf = malloc(tamanho);
>
> bzero(&hints, sizeof(hints));
> hints.ai_family = AF_UNSPEC;
> hints.ai_socktype = SOCK_DGRAM;
> hints.ai_protocol = IPPROTO_UDP;
>
> iResult = getaddrinfo(argv[1], argv[2], &hints, &result);
> if ( iResult != 0 ) {
> printf("getaddrinfo failed with error: %d\n", iResult);
> return 1;
> }
>
> // Attempt to connect to an address until one succeeds
> for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
>
> // Create a SOCKET for connecting to server
> s = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
> if (s < 0){
> perror("socket");
> return 1;
> }
>
> // Connect to server.
> iResult = connect(s, ptr->ai_addr, (int)ptr->ai_addrlen);
> if (iResult == SOCKET_ERROR) {
> close(s);
> s = INVALID_SOCKET;
> continue;
> }
>
> break;
> }
>
> freeaddrinfo(result);
> FD_ZERO(&fdset);
> FD_SET(s, &fdset);
> for (i=1; i<=npack || npack==0; i++) {
> aux = htonl(i);
> memcpy(&buf[0], &aux, sizeof(aux));
> aux = htonl(npack);
> memcpy(&buf[0+sizeof(i)], &aux, sizeof(aux));
> do{
> if(select(s+1, NULL, &fdset, NULL, NULL )<0)
> diep("select()");
> }while(!FD_ISSET(s, &fdset));
> if (send(s, buf, tamanho, 0)==-1)
> diep("sendto()");
> }
> printf("Enviados %d pacotes de %d bytes\n", npack, tamanho);
>
> close(s);
> return 0;
> }
> _______________________________________________
> freebsd-wireless at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
> To unsubscribe, send any mail to "freebsd-wireless-unsubscribe at freebsd.org"
More information about the freebsd-wireless
mailing list