devices/rtdmnet.c
branchstable-1.5
changeset 2727 32c9a2dea9ed
parent 2726 ca80d6dac4c8
equal deleted inserted replaced
2726:ca80d6dac4c8 2727:32c9a2dea9ed
   241 
   241 
   242        To keep a usable file descriptor for that socket, even when calling 
   242        To keep a usable file descriptor for that socket, even when calling 
   243        from cobalt thread (i.e. if (cobalt_ppd_get(0) != &cobalt_kernel_ppd))
   243        from cobalt thread (i.e. if (cobalt_ppd_get(0) != &cobalt_kernel_ppd))
   244        we resolve it here in advance */
   244        we resolve it here in advance */
   245     dev->rtdm_fd = rtdm_fd_get(dev->socket,0);
   245     dev->rtdm_fd = rtdm_fd_get(dev->socket,0);
   246 	if (IS_ERR(dev->rtdm_fd)){
   246     if (IS_ERR(dev->rtdm_fd)){
   247         printk(" rtdm_fd_get() = %d!\n", ret);
   247         printk(" rtdm_fd_get() = %d!\n", ret);
   248 		ret = PTR_ERR(dev->rtdm_fd);
   248         ret = PTR_ERR(dev->rtdm_fd);
   249         goto out_err;
   249         goto out_err_rtdm_fd;
   250     }
   250     }
   251 
   251 
   252     printk(KERN_ERR PFX "Binding socket to interface %i (%s).\n",
   252     printk(KERN_ERR PFX "Binding socket to interface %i (%s).\n",
   253             desc->ifindex, desc->name);
   253             desc->ifindex, desc->name);
   254 
   254 
   258     sa.sll_ifindex = desc->ifindex;
   258     sa.sll_ifindex = desc->ifindex;
   259     ret = rtdm_bind(dev->socket, (struct sockaddr *)&sa,
   259     ret = rtdm_bind(dev->socket, (struct sockaddr *)&sa,
   260                       sizeof(struct sockaddr_ll));
   260                       sizeof(struct sockaddr_ll));
   261     if (ret < 0) {
   261     if (ret < 0) {
   262         printk(" rtdm_bind() = %d!\n", ret);
   262         printk(" rtdm_bind() = %d!\n", ret);
   263         goto out_err;
   263         goto out_err_bind;
   264     }
   264     }
   265 
   265 
   266     return 0;
   266     return 0;
   267 
   267 
   268 out_err:
   268 out_err_bind:
   269     rtdm_fd_put(dev->rtdm_fd);
   269     rtdm_fd_put(dev->rtdm_fd);
       
   270 out_err_rtdm_fd:
   270     rtdm_close(dev->socket);
   271     rtdm_close(dev->socket);
   271     dev->socket = -1;
   272     dev->socket = -1;
   272     return ret;
   273     return ret;
   273     
   274     
   274 }
   275 }
   373     // msg.msg_name    = &dev->dest_addr;
   374     // msg.msg_name    = &dev->dest_addr;
   374     // msg.msg_namelen = sizeof(dev->dest_addr);
   375     // msg.msg_namelen = sizeof(dev->dest_addr);
   375     msg.msg_iov     = &iov;
   376     msg.msg_iov     = &iov;
   376     msg.msg_iovlen  = 1;
   377     msg.msg_iovlen  = 1;
   377 
   378 
   378 	if (rtdm_in_rt_context())
   379     if (rtdm_in_rt_context())
   379         /* HACK : call fd ops directly as in rtdm's fd.c */
   380         /* HACK : call fd ops directly as in rtdm's fd.c */
   380         ret = dev->rtdm_fd->ops->sendmsg_rt(dev->rtdm_fd, &msg, 0);
   381         ret = dev->rtdm_fd->ops->sendmsg_rt(dev->rtdm_fd, &msg, 0);
   381 	else
   382     else
   382         ret = nrt_rtdm_sendmsg(dev->socket, &msg);
   383         ret = nrt_rtdm_sendmsg(dev->socket, &msg);
   383 
   384 
   384     return ret == len ? NETDEV_TX_OK : NETDEV_TX_BUSY;
   385     return ret == len ? NETDEV_TX_OK : NETDEV_TX_BUSY;
   385 }
   386 }
   386 
   387