diff options
author | Andrew Hendry <andrew.hendry@gmail.com> | 2007-02-08 13:34:02 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-02-08 13:34:02 -0800 |
commit | 95a9dc4390c8215d922e0ca2ebb95279261fe795 (patch) | |
tree | 8b4be0c3a672ebd30d2777227e9a466819483ab8 /net/x25/x25_dev.c | |
parent | e610e679dd0057403c96cd31f8739792780732ee (diff) |
[X.25]: Add call forwarding
Adds call forwarding to X.25, allowing it to operate like an X.25 router.
Useful if one needs to manipulate X.25 traffic with tools like tc.
This is an update/cleanup based off a patch submitted by Daniel Ferenci a few years ago.
Thanks Alan for the feedback.
Added the null check to the clones.
Moved the skb_clone's into the forwarding functions.
Worked ok with Cisco XoT, linux X.25 back to back, and some old NTUs/PADs.
Signed-off-by: Andrew Hendry <andrew.hendry@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/x25/x25_dev.c')
-rw-r--r-- | net/x25/x25_dev.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/net/x25/x25_dev.c b/net/x25/x25_dev.c index 328d80f000a..f099fd6a7c0 100644 --- a/net/x25/x25_dev.c +++ b/net/x25/x25_dev.c @@ -67,9 +67,18 @@ static int x25_receive_data(struct sk_buff *skb, struct x25_neigh *nb) return x25_rx_call_request(skb, nb, lci); /* - * Its not a Call Request, nor is it a control frame. - * Let caller throw it away. + * Its not a Call Request, nor is it a control frame. + * Can we forward it? */ + + if (x25_forward_data(lci, nb, skb)) { + if (frametype == X25_CLEAR_CONFIRMATION) { + x25_clear_forward_by_lci(lci); + } + kfree_skb(skb); + return 1; + } + /* x25_transmit_clear_request(nb, lci, 0x0D); */ |