diff options
author | Oliver Hartkopp <socketcan@hartkopp.net> | 2013-01-17 18:43:41 +0100 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2013-01-26 16:59:01 +0100 |
commit | d904d3edcbb26efc86ea3575bb4265559801a94b (patch) | |
tree | 3589f467d029ea18c1740841ba5dd12323bc3b7a /net/can | |
parent | 156c2bb9f88065c8da78814f98fde665a5cbb527 (diff) | |
download | op-kernel-dev-d904d3edcbb26efc86ea3575bb4265559801a94b.zip op-kernel-dev-d904d3edcbb26efc86ea3575bb4265559801a94b.tar.gz |
can: gw: make routing to the incoming CAN interface configurable
Introduce new configuration flag CGW_FLAGS_CAN_IIF_TX_OK to configure if a
CAN sk_buff that has been routed with can-gw is allowed to be send back to
the originating CAN interface.
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'net/can')
-rw-r--r-- | net/can/gw.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/can/gw.c b/net/can/gw.c index 574dda78e..37a3efb 100644 --- a/net/can/gw.c +++ b/net/can/gw.c @@ -52,6 +52,7 @@ #include <linux/skbuff.h> #include <linux/can.h> #include <linux/can/core.h> +#include <linux/can/skb.h> #include <linux/can/gw.h> #include <net/rtnetlink.h> #include <net/net_namespace.h> @@ -347,6 +348,13 @@ static void can_can_gw_rcv(struct sk_buff *skb, void *data) return; } + /* is sending the skb back to the incoming interface not allowed? */ + if (!(gwj->flags & CGW_FLAGS_CAN_IIF_TX_OK) && + skb_headroom(skb) == sizeof(struct can_skb_priv) && + (((struct can_skb_priv *)(skb->head))->ifindex == + gwj->dst.dev->ifindex)) + return; + /* * clone the given skb, which has not been done in can_rcv() * |