]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Fixed wrong error frame filter handling.
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Wed, 10 Jan 2007 16:26:33 +0000 (16:26 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Wed, 10 Jan 2007 16:26:33 +0000 (16:26 +0000)
Moved CAN_ERR_MASK define to can.h .

git-svn-id: svn://svn.berlios.de//socketcan/trunk@128 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.4/can/af_can.c
kernel/2.4/can/can.h
kernel/2.4/can/can_error.h
kernel/2.6/include/linux/can.h
kernel/2.6/include/linux/can/error.h
kernel/2.6/net/can/af_can.c

index 879ed17cd6496ab1f0ad2293744bf2d6c6c10227..69399e86dee7b8d6ee0a109be5f236a5b7315f5e 100644 (file)
@@ -751,7 +751,12 @@ static struct receiver **find_rcv_list(canid_t *can_id, canid_t *mask,
        canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking values */
        canid_t eff = *can_id & *mask & CAN_EFF_FLAG; /* correct EFF check? */
        canid_t rtr = *can_id & *mask & CAN_RTR_FLAG; /* correct RTR check? */
-       canid_t err = *mask & CAN_ERR_FLAG; /* mask for error frames only */
+
+       /* do not modify the error mask due to the can_id which is 0 */
+       if (*mask & CAN_ERR_FLAG) { /* filter error frames */
+               *mask &= CAN_ERR_MASK; /* clear CAN_ERR_FLAG in list entry */
+               return &d->rx_err;
+       }
 
        /* make some paranoic operations */
        if (*can_id & CAN_EFF_FLAG)
@@ -761,9 +766,6 @@ static struct receiver **find_rcv_list(canid_t *can_id, canid_t *mask,
 
        *can_id &= *mask;
 
-       if (err) /* error frames */
-               return &d->rx_err;
-
        if (inv) /* inverse can_id/can_mask filter and RTR */
                return &d->rx_inv;
 
index 61a6e078a539fe2874503c46e715e3388b2fad97..d701d1aaa93f42d387b2b046b6963465fe9193c1 100644 (file)
@@ -69,6 +69,7 @@ RCSID("$Id$");
 /* valid bits in CAN ID for frame formats */
 #define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
 #define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
+#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
 
 typedef __u32 canid_t;
 
index f8a1541981f59eea14875c72828285129812a433..d44bc7cf089523ebae5e6ab2b719e2f96c24864c 100644 (file)
@@ -63,8 +63,6 @@ RCSID("$Id$");
 #define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */
 #define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */
 
-#define CAN_ERR_MASK         0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
-
 /* arbitration lost in bit ... / data[0] */
 #define CAN_ERR_LOSTARB_UNSPEC   0x00 /* unspecified */
                                      /* else bit number in bitstream */
index 1bcad21faebf31f7b44006566f9bd3935459ad29..f5def3937090dcd74e0344e6b911b39344f552ae 100644 (file)
@@ -75,6 +75,7 @@
 /* valid bits in CAN ID for frame formats */
 #define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
 #define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
+#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
 
 typedef __u32 canid_t;
 
index 657a00c8283015aa705dd5b0e741823e57f7dae4..d50655989c7502c3600fa9125600f97817ac777a 100644 (file)
@@ -58,8 +58,6 @@
 #define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */
 #define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */
 
-#define CAN_ERR_MASK         0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
-
 /* arbitration lost in bit ... / data[0] */
 #define CAN_ERR_LOSTARB_UNSPEC   0x00 /* unspecified */
                                      /* else bit number in bitstream */
index f4cfe9ca75dae72e9ef79d7e048cd297e349baa9..64058b667afb905c613d549cd8c6a52de117f7e6 100644 (file)
@@ -818,7 +818,12 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
        canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking values */
        canid_t eff = *can_id & *mask & CAN_EFF_FLAG; /* correct EFF check? */
        canid_t rtr = *can_id & *mask & CAN_RTR_FLAG; /* correct RTR check? */
-       canid_t err = *mask & CAN_ERR_FLAG; /* mask for error frames only */
+
+       /* do not modify the error mask due to the can_id which is 0 */
+       if (*mask & CAN_ERR_FLAG) { /* filter error frames */
+               *mask &= CAN_ERR_MASK; /* clear CAN_ERR_FLAG in list entry */
+               return &d->rx_err;
+       }
 
        /* make some paranoic operations */
        if (*can_id & CAN_EFF_FLAG)
@@ -828,9 +833,6 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask,
 
        *can_id &= *mask;
 
-       if (err) /* error frames */
-               return &d->rx_err;
-
        if (inv) /* inverse can_id/can_mask filter and RTR */
                return &d->rx_inv;