I write a code for send message my code is:
 
this is my code:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/net.h>
#include <linux/socket.h>
#include <linux/if_ether.h>

#include <linux/if_packet.h>

/* RTAI */
#include <rtai.h>
#include <rtai_sched.h>
#include <rtai_shm.h>
#include <rtai_sem.h>
#include <rtai_nam2num.h>
#include <rtai_fifos.h>

/* RTnet */
#include <rtnet.h>
#include <rtdm.h>

#include "packet_if.h"


MODULE_LICENSE("GPL");

static RT_TASK task_start;

int OpenTxSocket(const char *name, unsigned short protocol,
             int *ifindex, struct sockaddr *hwaddr)
{
        int st;
        int s;
        /* Open a PF_PACKET/SOCK_DGRAM socket */
        if((s = socket_rt(PF_PACKET, SOCK_DGRAM, htons(0x0000))) < 0)
        {
                printk("Error: socket_rt() = %d\n", s);
                return -1;
        }
        *ifindex = 1;
        /* Get interface index and hw address from name */
        hwaddr->sa_family = AF_PACKET;
        rt_eth_aton(hwaddr->sa_data, mac_eth0);

        /* If an error occurred (st < 0), close the socket and return the error
         * code, else return the socket id.
        */
        if(st < 0)  close_rt(s);
        else
        {
                printk("Tx socket %d bound to ", s);
                DumpIfInfo(name, *ifindex, hwaddr);
                st = s;
        }
        return st;
}


void
PrepareToAddr(const struct sockaddr *hwaddr, unsigned short protocol,
                int ifindex, struct sockaddr_ll *addr)
{
int i;

        addr->sll_family = AF_PACKET;
        addr->sll_protocol = htons(0x0000);
        addr->sll_ifindex = ifindex;
        addr->sll_hatype = 0;                       /* SBZ per packet(7) */
        addr->sll_pkttype = 0;                      /* SBZ per packet(7) */
        addr->sll_halen = 6;

        for(i=0; i<6; i++)
                addr->sll_addr[i] = hwaddr->sa_data[i];
}

int
My_Sendto(int s, const unsigned char buf[2048], size_t len,
                const struct sockaddr_ll *to_addr)
{
        int st;
        st = sendto_rt(s, &buf, len, MSG_DONTROUTE,
                        (struct sockaddr *)to_addr, sizeof(struct sockaddr_ll));

        if(st < 0) printk("Error: AttemptTx/sendto: %d\n", st);
        return st;
}

void
start(int thread)
{
   int i;
   for(i = 0; i < 20; i++)
   {
        tx_b[2048];
        My_sendto(tx_s, tx_b, 1024, to_addr);
   }
}

int tx_s;
struct sockaddr_ll to_addr;

int
init_module(void)
{
        printk("\nStart Packet_if\n\n");

        /* Open sockets and gather interface info (index and physical
address) */

        tx_s = OpenTxSocket(ETH0_NAME, MY_PROTOCOL, &tx_index, &tx_addr);
        if (tx_s < 0)
        {
                printk("Error: OpenTxSocket() = %d\n", tx_s);
                return -1;
        }
        rt_set_periodic_mode();
        period = start_rt_timer(nano2count(TICK_TIME));

start = rt_get_time() + 100*period;
        rt_task_init(&task_start, start, 0, 5000, 20, 0, 0);

        return rt_task_make_periodic(&task_start, start,
nano2count(opt->tx_interval));

}


-------------------------------------------------------
This SF.Net email is sponsored by Yahoo.
Introducing Yahoo! Search Developer Network - Create apps using Yahoo!
Search APIs Find out how you can build Yahoo! directly into your own
Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to