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.n...@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@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
> To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"
_______________________________________________
freebsd-wireless@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"

Reply via email to