Send UDP sockets with rtems with a M5234BCC

Diego Sanz dshernan80 at gmail.com
Mon Oct 19 10:18:41 UTC 2009


Hello

I am trying to send packets throw UDP sockets, on the board M5234BCC whose
microcontroller is mcf 5234 (coldfire), with RTEMS
The Examples that comes with RTEMS works perfectly, including the loopback
exaqmple.

Well The next code is the application that I am trying to make but doesn't
send anything throw the cable ( I see with the commview program).

Could someone help me and tell me if is there some error?  Thanks!

The code:

/*
 *  $Id: init.c,v 1.6 2007/04/05 15:22:58 joel Exp $
 */

#include <bsp.h>

#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE

#define CONFIGURE_EXECUTIVE_RAM_SIZE        (512*1024)
#define CONFIGURE_MAXIMUM_SEMAPHORES        20
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES    20
#define CONFIGURE_MAXIMUM_TASKS            20

#define CONFIGURE_MICROSECONDS_PER_TICK    10000
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 50
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM

#define CONFIGURE_INIT_TASK_STACK_SIZE    (10*1024)
#define CONFIGURE_INIT_TASK_PRIORITY    50
#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
                                           RTEMS_NO_TIMESLICE | \
                                           RTEMS_NO_ASR | \
                                           RTEMS_INTERRUPT_LEVEL(0))

#define CONFIGURE_INIT
rtems_task Init(rtems_task_argument argument);

#include <rtems/confdefs.h>

#include <rtems/rtems_bsdnet.h>
#include <rtems/error.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/sockio.h>

/*
 * Network configuration
 */
//extern void rtems_bsdnet_loopattach();
static struct rtems_bsdnet_ifconfig netdriver_config = {
    //"lo0",                          /* name */
   // (int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach,
/* attach function */
     RTEMS_BSP_NETWORK_DRIVER_NAME,
     RTEMS_BSP_NETWORK_DRIVER_ATTACH,
     NULL,                           /* link to next interface */
    "138.100.48.254",                    /* IP address */
    "255.225.225.128",                    /* IP net mask */
     NULL,
     0,
};

struct rtems_bsdnet_config rtems_bsdnet_config = {
    &netdriver_config,       /* Network interface */
    NULL,                   /* Use fixed network configuration */
    0,                      /* Default network task priority */
    0,                      /* Default mbuf capacity */
    0,                      /* Default mbuf cluster capacity */
    "testSystem",           /* Host name */
    "nowhere.com",          /* Domain name */
    "138.100.48.129",            /* Gateway */
    "138.100.48.253",            /* Log host */
    {"127.0.0.1" },         /* Name server(s) */
    {"127.0.0.1" },         /* NTP server(s) */
};

/*
 * Thread-safe output routines
 */
static rtems_id printMutex;
static void printSafe(const char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    rtems_semaphore_obtain(printMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    vprintf(fmt, args);
    rtems_semaphore_release(printMutex);
    va_end(args);
}
#define printf printSafe




/*
 * The real part of the client
 */
static rtems_task clientWorker(int arg)
{

     int s;
        struct sockaddr_in myAddr, farAddr,buffer;
        struct sockaddr hola;
        char cbuf[]={"HOLA DIEGO TE HABLA 5235"};
        int i;
        int f, flags;
        struct ifreq *device;
     struct ifconf data;
         unsigned long int broadaddr=0;
         data.ifc_len=sizeof(device);
     memset(data.ifc_buf,0,data.ifc_len);

     flags = IFF_UP|IFF_RUNNING;

      s=socket(AF_INET,SOCK_DGRAM,0);
    if (s < 0)
    {
        printf("Can't create client socket: %s\n", strerror(errno));
            return;
    }
//SIOCSIFBRDADDR
        printf("\nENTRA EN LA TAREA CLIENT WORKER\n");
    //rtems_bsdnet_ifconfig(RTEMS_BSP_NETWORK_DRIVER_NAME, SIOCGIFDSTADDR,
&device);


     //buffer=(struct sockaddr_in)device->ifr_ifru.ifru_broadaddr;




    broadaddr=(device->ifr_ifru.ifru_addr.sa_data[0])<<24;
     broadaddr|=(device->ifr_ifru.ifru_addr.sa_data[1])<<16;
     broadaddr|=(device->ifr_ifru.ifru_addr.sa_data[2])<<8;
     broadaddr|=(device->ifr_ifru.ifru_addr.sa_data[3]);

        /*
    printf("\name:%s",device->ifr_name);
        printf("\n direccion de broadcast=%u  \n",broadaddr);
        */

    memset(&myAddr, 0, sizeof myAddr);
    myAddr.sin_family = AF_INET;
//    myAddr.sin_port = htons(10100);
    myAddr.sin_port = 10100;
    myAddr.sin_addr.s_addr = inet_addr("138.100.48.254");

    if (bind(s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0)
    {
        printf("Can't bind socket: %s\n", strerror(errno));
            goto close;
       }
        memset(&farAddr, 0, sizeof farAddr);
    farAddr.sin_family = AF_INET;
//    farAddr.sin_port=htons(10001);
    farAddr.sin_port=10001;
    farAddr.sin_addr.s_addr = inet_addr("138.100.48.253");
/***************************************************************/
    rtems_bsdnet_show_inet_routes ();
//     rtems_bsdnet_show_mbuf_stats ();
//    rtems_bsdnet_show_if_stats ();
//    rtems_bsdnet_show_ip_stats ();
//    rtems_bsdnet_show_udp_stats ();


    printf("\n sending to host\n ");
    i=sendto(s,&cbuf,25,0,(struct sockaddr*)&farAddr,sizeof(struct
sockaddr));

    if (i>0)
    {
        printf("Enviado correctamente\n %d",i);

    }
    else
    {
        printf("Enviado Incorrectamente\n");
    }
  close:
    printf("Client closing connection.\n");
    if (close(s) < 0)
    {
                printf("Can't close client task socket: %s\n",
strerror(errno));
    }
}




rtems_task
Init (rtems_task_argument ignored)
{
    int net_state=0;



     printf("\"Network\" initializing! HI DIEGO\n");
    net_state=rtems_bsdnet_initialize_network();
    printf("\"Network\" initialized! %d\n",net_state);

    printf("Try running client with no server present.\n");
    printf("Should fail with `connection refused'.\n");
    clientWorker(0);

}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20091019/0fd195c1/attachment.html>


More information about the users mailing list