aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorAndrew Hendry <andrew.hendry@gmail.com>2007-02-08 16:34:02 -0500
committerDavid S. Miller <davem@davemloft.net>2007-02-08 16:34:02 -0500
commit95a9dc4390c8215d922e0ca2ebb95279261fe795 (patch)
tree8b4be0c3a672ebd30d2777227e9a466819483ab8 /include/net
parente610e679dd0057403c96cd31f8739792780732ee (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 'include/net')
-rw-r--r--include/net/x25.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/net/x25.h b/include/net/x25.h
index e47fe440d9d7..3b1190514d92 100644
--- a/include/net/x25.h
+++ b/include/net/x25.h
@@ -161,6 +161,14 @@ struct x25_sock {
161 unsigned long vc_facil_mask; /* inc_call facilities mask */ 161 unsigned long vc_facil_mask; /* inc_call facilities mask */
162}; 162};
163 163
164struct x25_forward {
165 struct list_head node;
166 unsigned int lci;
167 struct net_device *dev1;
168 struct net_device *dev2;
169 atomic_t refcnt;
170};
171
164static inline struct x25_sock *x25_sk(const struct sock *sk) 172static inline struct x25_sock *x25_sk(const struct sock *sk)
165{ 173{
166 return (struct x25_sock *)sk; 174 return (struct x25_sock *)sk;
@@ -198,6 +206,13 @@ extern int x25_negotiate_facilities(struct sk_buff *, struct sock *,
198 struct x25_dte_facilities *); 206 struct x25_dte_facilities *);
199extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *); 207extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *);
200 208
209/* x25_forward.c */
210extern void x25_clear_forward_by_lci(unsigned int lci);
211extern void x25_clear_forward_by_dev(struct net_device *);
212extern int x25_forward_data(int, struct x25_neigh *, struct sk_buff *);
213extern int x25_forward_call(struct x25_address *, struct x25_neigh *,
214 struct sk_buff *, int);
215
201/* x25_in.c */ 216/* x25_in.c */
202extern int x25_process_rx_frame(struct sock *, struct sk_buff *); 217extern int x25_process_rx_frame(struct sock *, struct sk_buff *);
203extern int x25_backlog_rcv(struct sock *, struct sk_buff *); 218extern int x25_backlog_rcv(struct sock *, struct sk_buff *);
@@ -282,6 +297,8 @@ extern struct hlist_head x25_list;
282extern rwlock_t x25_list_lock; 297extern rwlock_t x25_list_lock;
283extern struct list_head x25_route_list; 298extern struct list_head x25_route_list;
284extern rwlock_t x25_route_list_lock; 299extern rwlock_t x25_route_list_lock;
300extern struct list_head x25_forward_list;
301extern rwlock_t x25_forward_list_lock;
285 302
286extern int x25_proc_init(void); 303extern int x25_proc_init(void);
287extern void x25_proc_exit(void); 304extern void x25_proc_exit(void);