+ if ((sl->lin_state == SLSTATE_IDLE) && test_bit(SLF_MSGEVENT, &sl->flags)) {
+ cf = (struct can_frame *)sl->rec_skb->data;
+
+ /* We do care only about SFF frames */
+ if (cf->can_id & CAN_EFF_FLAG)
+ goto release_skb;
+
+ if (cf->can_id & CAN_RTR_FLAG) {
+ printk(KERN_INFO "%s: RTR CAN frame, ID = %x\n",
+ __FUNCTION__, cf->can_id & CAN_SFF_MASK);
+ if (sllin_setup_msg(sl, 0,
+ cf->can_id & CAN_SFF_MASK, NULL, 0) != -1) {
+ sl->id_to_send = true;
+ }
+ } else {
+ printk(KERN_INFO "%s: NON-RTR CAN frame, ID = %x\n",
+ __FUNCTION__, (int)cf->can_id & CAN_SFF_MASK);
+
+ if (sllin_setup_msg(sl, 0, cf->can_id & CAN_SFF_MASK,
+ cf->data, cf->can_dlc) != -1) {
+ sl->id_to_send = true;
+ }
+ }
+
+ release_skb:
+ clear_bit(SLF_MSGEVENT, &sl->flags);
+ kfree_skb(sl->rec_skb);
+ netif_wake_queue(sl->dev);
+ }
+