Monotosh Das wrote:
> Sorry for the previous unexpected line wrap... this time hopefully this will 
> work...
> please note that I am trying to communicate periodically with an application 
> running standard winsock UDP/IP socket on windows machine....Please rectify 
> if I have made any fundamental error...
> 
> The source code...
> 
> 
> static struct sockaddr_in local_addr;
> static struct sockaddr_in server_addr;
> static void *SendRcvFun(void *arg)
> {
>       RT_TASK *handler;       //local handler
>       static struct {
>               unsigned long indx;
>               RTIME time;
>       } msg = {0,0};
>       int sockfd = 0;
>       int ret    = 0;
>       char msgStr[100] = "Hello world";
>     /* Set variables to zero.  */
>       memset(msgStr, 0, sizeof(msgStr));
>       memset(&local_addr, 0, sizeof (struct sockaddr_in));
>       memset(&server_addr, 0, sizeof(struct sockaddr_in));
>       printf("RTnet, simpleserver for LXRT\n");
> 
>     /* Check arguments and set addresses. */
> 
>         local_addr.sin_family      = AF_INET;
>         local_addr.sin_addr.s_addr = INADDR_ANY;
>         local_addr.sin_port        = htons(11000);//htons(atoi(11000));
> 
>         server_addr.sin_family = AF_INET;
>         inet_aton("139.30.6.66", &server_addr.sin_addr);
>         server_addr.sin_port = htons(11000);
> 
> 
>       printf("SendRcv Start\n");
>       rtf_create(FIFO, 2000);
>       printf("FIFO created\n");
>       mlockall(MCL_CURRENT | MCL_FUTURE);
>       sockfd = rt_dev_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
>       if (sockfd < 0) {
>               printf("Error opening socket: %d\n", sockfd);
>               exit(1);
>       }
> 
>                                                       //
>       if (!(handler= rt_task_init_schmod(nam2num("SRTSK"), 0, 0, 
> 0,SCHED_FIFO, 
> 0xFF))) {
>                 printf("CANNOT INIT SendRcvFun\n");
>               rt_dev_close(sockfd);
>                 exit(1);
>         }
>       rt_set_periodic_mode();
>       start_rt_timer(0);
>       period = start_rt_timer(nano2count(TIMERTICKS));
>       rt_task_make_periodic(handler, rt_get_time()+period, period);
> 
>       rt_make_hard_real_time();
>     /* Bind socket to local address specified as parameter. */
>       ret = rt_dev_bind(sockfd, (struct sockaddr *) &local_addr, 
> sizeof(struct 
> sockaddr_in));
>     /* Specify destination address for socket; needed for rt_socket_send(). 
> */
>       rt_dev_connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct 
> sockaddr_in));
>       endSendRcvFun = 0;
> 
>       while (!endSendRcvFun) {
>               ret = rt_dev_recv(sockfd, msgStr, sizeof(msgStr), MSG_DONTWAIT);
>               ret = rt_dev_send(sockfd, msgStr, sizeof(msgStr), MSG_DONTWAIT);
>               msg.indx = ret;
>               msg.time = rt_get_time_ns();
>               rtf_put(FIFO, &msg, sizeof(msg));
>               //printk("h");
>               rt_task_wait_period();
>       }
>       stop_rt_timer();
>       rt_make_soft_real_time();
>       rt_dev_close(sockfd);
>       rt_task_delete(handler);
>       rtf_destroy(FIFO);
>       return 0;
> }
> 

Nothing obvious here.

> 
> I suspect the error occurs when I insert the code
> ret = rt_dev_recv(sockfd, msgStr, sizeof(msgStr), MSG_DONTWAIT);
> 
> The error reported by the dmesg...
> 
> *** RTnet 0.9.8 - built on Jan 12 2007 20:25:45 ***
> 
> RTnet: initialising real-time networking
> initializing loopback...
> RTnet: registered rtlo
> ACPI: PCI Interrupt 0000:02:08.0[A] -> Link [LNKD] -> GSI 9 (level, low) -> 
> IRQ 9
> rteth0: OEM i82557/i82558 10/100 Ethernet, 00:30:05:08:51:74, IRQ 9.
> RTnet: registered rteth0
> RTnet: host 222.83.167.242 unreachable
> RTnet: no protocol found
> RTnet: no protocol found
> RTnet: no protocol found
> RTnet: no protocol found
> 
> LXRT CHANGED MODE (TRAP), PID = 4313, VEC = 14, SIGNO = 11.
> BUG: unable to handle kernel NULL pointer dereference at virtual address 
> 00000024
> printing eip:
> d0f666be
> *pde = 00000000
> Oops: 0000 [#1]
> PREEMPT
> Modules linked in: rt_eepro100 rt_loopback rtipv4 rtnet rtai_rtdm rtai_fifos 
> rtai_sem rtai_lxrt rtai_hal button battery ac loop dm_mod bttv video_buf 
> firmware_class ir_common compat_ioctl32 i2c_algo_bit v4l2_common btcx_risc 
> tveeprom videodev mii intel_agp agpgart ide_cd uhci_hcd cdrom usbcore 
> i8xx_tco i2c_i801 shpchp i2c_core pci_hotplug parport_pc lp parport ext3 
> mbcache jbd edd fan sg aic7xxx scsi_transport_spi piix thermal processor 
> sd_mod scsi_mod ide_disk ide_core
> CPU:    0
> EIP:    0060:[<d0f666be>]    Not tainted VLI
> EFLAGS: 00013246   (2.6.17-RTAI #1)
> EIP is at rt_udp_recvmsg+0xd6/0x1b8 [rtipv4]
> eax: 00000000   ebx: cf82e5f4   ecx: 00003246   edx: 00000000
> esi: 00000000   edi: ca401ee8   ebp: c60c4a90   esp: ca401e84
> ds: 007b   es: 007b   ss: 0068
> Process udpsendReceive (pid: 4313, threadinfo=ca400000 task=c60c4a90)
> Stack: cf82e618 ffffffff ffffffff 00000000 cf82e618 00000064 cf82e604 
> cf82e5e0
>        00000040 ca401ee8 c60c4a90 d0f6d666 cf82e5e0 c60c4a90 ca401ee8 
> 00000040
>        fffffff2 ca401ee8 b7e1d2e0 c60c4a90 d0f6e940 c60c4a90 00000000 
> ca401ee8
> Call Trace:
> <d0f6d666> _rtdm_recvmsg+0x4e/0x70 [rtai_rtdm]  <d0f6e940> 
> sys_rtdm_recvmsg+0x5e/0x82 [rtai_rtdm]
> <d0f8083f> rtai_lxrt_invoke+0x151/0x10c6 [rtai_lxrt]  <d0f83be3> 
> rt_task_make_periodic+0x0/0xed [rtai_lxrt]
> <d0f6e8e2> sys_rtdm_recvmsg+0x0/0x82 [rtai_rtdm]  <c01176b1> 
> sched_setscheduler+0x22c/0x269
> <c0142e8d> __ipipe_dispatch_event+0x32/0x10d  <d0f58053> 
> rtai_syscall_dispatcher+0x55/0xeb [rtai_hal]
> <d0f5707e> rtai_uvec_handler+0x1a/0x30 [rtai_hal]
> Code: 00 8b 7c 24 14 e9 a9 00 00 00 8d 73 10 89 74 24 18 9c 59 fa 8b 73 10 
> 85 f6 74 0e 8b 56 04 8b 02 89 43 10 c7 02 00 00 00 00 51 9d <8b> 4e 24 0f b7 
> 51 04 0f b6 c2 c1 e0 08 c1 ea 08 09 d0 8d 68 f8
> EIP: [<d0f666be>] rt_udp_recvmsg+0xd6/0x1b8 [rtipv4] SS:ESP 0068:ca401e84
> LXRT releases PID 4313 (ID: udpsendReceive).

The oops is unexplainable at the moment. Could you switch on the
internal debug checks in RTnet to see if this catches something (will be
in the kernel log then)?

If it doesn't, please sent me your rtipv4.ko binary privately (+ the
latest oops dump - addresses will change after the reconfiguration). I
would like to have a look a the disassembly to find out what address is
NULL here.

(Reminds me that RTnet urgently needs security checks for bogus
userspace pointers. Sigh.)

Jan

Attachment: signature.asc
Description: OpenPGP digital signature

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to