aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/llc.h
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-10-03 19:46:45 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-10-03 19:46:45 -0400
commit2b235826098bb653982894dfc3f70fd029f6c2e4 (patch)
treeec525ddba74f58017a3f145bb68cf94376648c1c /include/net/llc.h
parentb4b52db71529bbe46da914eda772fb574914c94d (diff)
parentc77054e518d9163578cfcad09826d7b959f95ece (diff)
downloadkernel_samsung_smdk4412-2b235826098bb653982894dfc3f70fd029f6c2e4.tar.gz
kernel_samsung_smdk4412-2b235826098bb653982894dfc3f70fd029f6c2e4.tar.bz2
kernel_samsung_smdk4412-2b235826098bb653982894dfc3f70fd029f6c2e4.zip
Merge branch 'master'
Diffstat (limited to 'include/net/llc.h')
-rw-r--r--include/net/llc.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/include/net/llc.h b/include/net/llc.h
index 71769a5aeef..1adb2ef3f6f 100644
--- a/include/net/llc.h
+++ b/include/net/llc.h
@@ -17,6 +17,8 @@
#include <linux/list.h>
#include <linux/spinlock.h>
+#include <asm/atomic.h>
+
struct net_device;
struct packet_type;
struct sk_buff;
@@ -44,6 +46,7 @@ struct llc_sap {
unsigned char state;
unsigned char p_bit;
unsigned char f_bit;
+ atomic_t refcnt;
int (*rcv_func)(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *pt,
@@ -81,13 +84,27 @@ extern struct llc_sap *llc_sap_open(unsigned char lsap,
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev));
+static inline void llc_sap_hold(struct llc_sap *sap)
+{
+ atomic_inc(&sap->refcnt);
+}
+
extern void llc_sap_close(struct llc_sap *sap);
+static inline void llc_sap_put(struct llc_sap *sap)
+{
+ if (atomic_dec_and_test(&sap->refcnt))
+ llc_sap_close(sap);
+}
+
extern struct llc_sap *llc_sap_find(unsigned char sap_value);
extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
unsigned char *dmac, unsigned char dsap);
+extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb);
+extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);
+
extern int llc_station_init(void);
extern void llc_station_exit(void);
@@ -98,4 +115,17 @@ extern void llc_proc_exit(void);
#define llc_proc_init() (0)
#define llc_proc_exit() do { } while(0)
#endif /* CONFIG_PROC_FS */
+#ifdef CONFIG_SYSCTL
+extern int llc_sysctl_init(void);
+extern void llc_sysctl_exit(void);
+
+extern int sysctl_llc2_ack_timeout;
+extern int sysctl_llc2_busy_timeout;
+extern int sysctl_llc2_p_timeout;
+extern int sysctl_llc2_rej_timeout;
+extern int sysctl_llc_station_ack_timeout;
+#else
+#define llc_sysctl_init() (0)
+#define llc_sysctl_exit() do { } while(0)
+#endif /* CONFIG_SYSCTL */
#endif /* LLC_H */