Skip to content

Commit

Permalink
can: gw: indicate and count deleted frames due to misconfiguration
Browse files Browse the repository at this point in the history
Add a statistic counter to detect deleted frames due to misconfiguration with
a new read-only CGW_DELETED netlink attribute for the CAN gateway.

Signed-off-by: Oliver Hartkopp <[email protected]>
Signed-off-by: Marc Kleine-Budde <[email protected]>
  • Loading branch information
hartkopp authored and marckleinebudde committed Jan 26, 2013
1 parent be286ba commit e6afa00
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/uapi/linux/can/gw.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ enum {
CGW_SRC_IF, /* ifindex of source network interface */
CGW_DST_IF, /* ifindex of destination network interface */
CGW_FILTER, /* specify struct can_filter on source CAN device */
CGW_DELETED, /* number of deleted CAN frames (see max_hops param) */
__CGW_MAX
};

Expand Down
12 changes: 11 additions & 1 deletion net/can/gw.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ struct cgw_job {
struct rcu_head rcu;
u32 handled_frames;
u32 dropped_frames;
u32 deleted_frames;
struct cf_mod mod;
union {
/* CAN frame data source */
Expand Down Expand Up @@ -367,8 +368,11 @@ static void can_can_gw_rcv(struct sk_buff *skb, void *data)

BUG_ON(skb->ip_summed != CHECKSUM_UNNECESSARY);

if (cgw_hops(skb) >= max_hops)
if (cgw_hops(skb) >= max_hops) {
/* indicate deleted frames due to misconfiguration */
gwj->deleted_frames++;
return;
}

if (!(gwj->dst.dev->flags & IFF_UP)) {
gwj->dropped_frames++;
Expand Down Expand Up @@ -500,6 +504,11 @@ static int cgw_put_job(struct sk_buff *skb, struct cgw_job *gwj, int type,
goto cancel;
}

if (gwj->deleted_frames) {
if (nla_put_u32(skb, CGW_DELETED, gwj->deleted_frames) < 0)
goto cancel;
}

/* check non default settings of attributes */

if (gwj->mod.modtype.and) {
Expand Down Expand Up @@ -799,6 +808,7 @@ static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh,

gwj->handled_frames = 0;
gwj->dropped_frames = 0;
gwj->deleted_frames = 0;
gwj->flags = r->flags;
gwj->gwtype = r->gwtype;

Expand Down

0 comments on commit e6afa00

Please sign in to comment.