Add can_dropped_invalid_skb() to elmcan_netdev_start_xmit()
[elmcan.git] / module / elmcan.c
index fd38475b0306b3538b8a14cbbb696b6127efa4a6..9a58655383bc76a92b527d7ca0a7ed6e23eb7fe4 100644 (file)
@@ -209,8 +209,8 @@ static void elm327_send_frame(struct elmcan *elm, struct can_frame *frame)
        /* Schedule any necessary changes in ELM327's CAN configuration */
        if (elm->can_frame_to_send.can_id != frame->can_id) {
                /* Set the new CAN ID for transmission. */
-               if ((frame->can_id & CAN_EFF_FLAG)
-                   (elm->can_frame_to_send.can_id & CAN_EFF_FLAG)) {
+               if ((frame->can_id & CAN_EFF_FLAG) ^
+                   (elm->can_frame_to_send.can_id & CAN_EFF_FLAG)) {
                        elm->can_config = (frame->can_id & CAN_EFF_FLAG
                                                ? 0
                                                : ELM327_CAN_CONFIG_SEND_SFF)
@@ -469,7 +469,6 @@ static int elm327_parse_frame(struct elmcan *elm, size_t len)
                frame->can_id = CAN_EFF_FLAG;
                datastart = 14;
        } else if (elm->rxbuf[3] == ' ' && elm->rxbuf[5] == ' ') {
-               frame->can_id = 0;
                datastart = 6;
        } else {
                /* This is not a well-formatted data line.
@@ -848,6 +847,9 @@ static netdev_tx_t elmcan_netdev_start_xmit(struct sk_buff *skb,
        struct elmcan *elm = netdev_priv(dev);
        struct can_frame *frame = (struct can_frame *)skb->data;
 
+       if (can_dropped_invalid_skb(dev, skb))
+               return NETDEV_TX_OK;
+
        /* BHs are already disabled, so no spin_lock_bh().
         * See Documentation/networking/netdevices.txt
         */
@@ -1118,7 +1120,6 @@ static int elmcan_ldisc_open(struct tty_struct *tty)
        INIT_WORK(&elm->tx_work, elmcan_ldisc_tx_worker);
 
        /* Configure CAN metadata */
-       elm->can.state = CAN_STATE_STOPPED;
        elm->can.bitrate_const = elmcan_bitrate_const;
        elm->can.bitrate_const_cnt = ARRAY_SIZE(elmcan_bitrate_const);
        elm->can.do_set_bittiming = elmcan_do_set_bittiming;