Hello,

I have an problem and after one week I'm at one's wits' end. I wrote a client 
that send a raw message to a second system. That works. Now I want to wait for 
a 
request form the second system befor I send my message. The second system sends 
an broadcast, but my program isn't able to receive that. Here is my code:

 RT_TASK *lxrtnettsk;
 char msg[60];
 char msgRecv[60];

 unsigned char src_mac[6] = {0x00, 0x10, 0xa7, 0x23, 0x4f, 0x17};
 int transmittionTime=1000;//Zeit in Milisekunden
 int sendLoops = 2;

 static struct sockaddr_ll newAddr;
 struct ifreq newIfr;

 struct ether_header *eth = (struct ether_header *)msg;

 int ret    = 0;
 int newSocket = 0;
 int count = 0;

 sprintf(msg, "Used RTAI, RTnet and UDP!");
 system("sh ModuleEinbindenJitterTestXPC.sh");
 cout << msg << endl;

 mlockall(MCL_CURRENT|MCL_FUTURE);
 memset(eth->ether_dhost, 0xFF, ETH_HLEN);
 eth->ether_type=htons(0x1234);
 strncpy(newIfr.ifr_name, "rteth0", IFNAMSIZ);
 newSocket = rt_dev_socket(AF_PACKET, SOCK_RAW, 0);


 //RAW communication
 newAddr.sll_family = PF_PACKET;
 newAddr.sll_protocol = htons(ETH_P_IP);
 newAddr.sll_ifindex= 2;
 newAddr.sll_hatype = 1;//ARPHRD_ETHER;
 newAddr.sll_pkttype = PACKET_OTHERHOST;
 newAddr.sll_halen = ETH_ALEN;

 //MAC - Begin
 newAddr.sll_addr[0] = src_mac[0];
 newAddr.sll_addr[1] = src_mac[1];
 newAddr.sll_addr[2] = src_mac[2];
 newAddr.sll_addr[3] = src_mac[3];
 newAddr.sll_addr[4] = src_mac[4];
 newAddr.sll_addr[5] = src_mac[5];
 //MAC - End
 newAddr.sll_addr[6] = 0x00; //not used
 newAddr.sll_addr[7] = 0x00; //not used

 lxrtnettsk = rt_task_init(4800, 1, 0, 0);
 if (NULL == lxrtnettsk)
 {
  rt_dev_close(newSocket);
  printf("CANNOT INIT MASTER TASK\n");
  exit(1);
 }
 rt_make_hard_real_time();
 start_rt_timer(0);
 ret = rt_dev_bind(newSocket, (struct sockaddr *)&newAddr, sizeof(newAddr));
 cout << "newBind: " << ret << endl;
 while(count<sendLoops)
 {
  ret = rt_dev_recv(newSocket, msgRecv, 60, 0);
  ret = rt_dev_send(newSocket, msg, sizeof(msg), 0);
  rt_sleep(1000000);
  count++;
 }

 rt_make_soft_real_time();
 rt_dev_close(newSocket);
 rt_task_delete(lxrtnettsk);

Some Ideas?

Regards,
     Franz


------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to