11da177e4SLinus Torvalds #ifndef LLC_H 21da177e4SLinus Torvalds #define LLC_H 31da177e4SLinus Torvalds /* 41da177e4SLinus Torvalds * Copyright (c) 1997 by Procom Technology, Inc. 51da177e4SLinus Torvalds * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * This program can be redistributed or modified under the terms of the 81da177e4SLinus Torvalds * GNU General Public License as published by the Free Software Foundation. 91da177e4SLinus Torvalds * This program is distributed without any warranty or implied warranty 101da177e4SLinus Torvalds * of merchantability or fitness for a particular purpose. 111da177e4SLinus Torvalds * 121da177e4SLinus Torvalds * See the GNU General Public License for more details. 131da177e4SLinus Torvalds */ 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds #include <linux/if.h> 161da177e4SLinus Torvalds #include <linux/if_ether.h> 171da177e4SLinus Torvalds #include <linux/list.h> 181da177e4SLinus Torvalds #include <linux/spinlock.h> 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds struct net_device; 211da177e4SLinus Torvalds struct packet_type; 221da177e4SLinus Torvalds struct sk_buff; 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds struct llc_addr { 251da177e4SLinus Torvalds unsigned char lsap; 261da177e4SLinus Torvalds unsigned char mac[IFHWADDRLEN]; 271da177e4SLinus Torvalds }; 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds #define LLC_SAP_STATE_INACTIVE 1 301da177e4SLinus Torvalds #define LLC_SAP_STATE_ACTIVE 2 311da177e4SLinus Torvalds 321da177e4SLinus Torvalds /** 331da177e4SLinus Torvalds * struct llc_sap - Defines the SAP component 341da177e4SLinus Torvalds * 351da177e4SLinus Torvalds * @station - station this sap belongs to 361da177e4SLinus Torvalds * @state - sap state 371da177e4SLinus Torvalds * @p_bit - only lowest-order bit used 381da177e4SLinus Torvalds * @f_bit - only lowest-order bit used 391da177e4SLinus Torvalds * @laddr - SAP value in this 'lsap' 401da177e4SLinus Torvalds * @node - entry in station sap_list 411da177e4SLinus Torvalds * @sk_list - LLC sockets this one manages 421da177e4SLinus Torvalds */ 431da177e4SLinus Torvalds struct llc_sap { 441da177e4SLinus Torvalds unsigned char state; 451da177e4SLinus Torvalds unsigned char p_bit; 461da177e4SLinus Torvalds unsigned char f_bit; 471da177e4SLinus Torvalds int (*rcv_func)(struct sk_buff *skb, 481da177e4SLinus Torvalds struct net_device *dev, 49f2ccd8faSDavid S. Miller struct packet_type *pt, 50f2ccd8faSDavid S. Miller struct net_device *orig_dev); 511da177e4SLinus Torvalds struct llc_addr laddr; 521da177e4SLinus Torvalds struct list_head node; 531da177e4SLinus Torvalds struct { 541da177e4SLinus Torvalds rwlock_t lock; 551da177e4SLinus Torvalds struct hlist_head list; 561da177e4SLinus Torvalds } sk_list; 571da177e4SLinus Torvalds }; 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds #define LLC_DEST_INVALID 0 /* Invalid LLC PDU type */ 601da177e4SLinus Torvalds #define LLC_DEST_SAP 1 /* Type 1 goes here */ 611da177e4SLinus Torvalds #define LLC_DEST_CONN 2 /* Type 2 goes here */ 621da177e4SLinus Torvalds 631da177e4SLinus Torvalds extern struct list_head llc_sap_list; 641da177e4SLinus Torvalds extern rwlock_t llc_sap_list_lock; 651da177e4SLinus Torvalds extern unsigned char llc_station_mac_sa[ETH_ALEN]; 661da177e4SLinus Torvalds 671da177e4SLinus Torvalds extern int llc_rcv(struct sk_buff *skb, struct net_device *dev, 68f2ccd8faSDavid S. Miller struct packet_type *pt, struct net_device *orig_dev); 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds extern int llc_mac_hdr_init(struct sk_buff *skb, 711da177e4SLinus Torvalds unsigned char *sa, unsigned char *da); 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds extern void llc_add_pack(int type, void (*handler)(struct llc_sap *sap, 741da177e4SLinus Torvalds struct sk_buff *skb)); 751da177e4SLinus Torvalds extern void llc_remove_pack(int type); 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds extern void llc_set_station_handler(void (*handler)(struct sk_buff *skb)); 781da177e4SLinus Torvalds 791da177e4SLinus Torvalds extern struct llc_sap *llc_sap_open(unsigned char lsap, 801da177e4SLinus Torvalds int (*rcv)(struct sk_buff *skb, 811da177e4SLinus Torvalds struct net_device *dev, 82f2ccd8faSDavid S. Miller struct packet_type *pt, 83f2ccd8faSDavid S. Miller struct net_device *orig_dev)); 841da177e4SLinus Torvalds extern void llc_sap_close(struct llc_sap *sap); 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds extern struct llc_sap *llc_sap_find(unsigned char sap_value); 871da177e4SLinus Torvalds 881da177e4SLinus Torvalds extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, 891da177e4SLinus Torvalds unsigned char *dmac, unsigned char dsap); 901da177e4SLinus Torvalds 911da177e4SLinus Torvalds extern int llc_station_init(void); 921da177e4SLinus Torvalds extern void llc_station_exit(void); 931da177e4SLinus Torvalds 941da177e4SLinus Torvalds #ifdef CONFIG_PROC_FS 951da177e4SLinus Torvalds extern int llc_proc_init(void); 961da177e4SLinus Torvalds extern void llc_proc_exit(void); 971da177e4SLinus Torvalds #else 981da177e4SLinus Torvalds #define llc_proc_init() (0) 991da177e4SLinus Torvalds #define llc_proc_exit() do { } while(0) 1001da177e4SLinus Torvalds #endif /* CONFIG_PROC_FS */ 101590232a7SArnaldo Carvalho de Melo #ifdef CONFIG_SYSCTL 102590232a7SArnaldo Carvalho de Melo extern int llc_sysctl_init(void); 103590232a7SArnaldo Carvalho de Melo extern void llc_sysctl_exit(void); 104590232a7SArnaldo Carvalho de Melo #else 105590232a7SArnaldo Carvalho de Melo #define llc_sysctl_init() (0) 106590232a7SArnaldo Carvalho de Melo #define llc_sysctl_exit() do { } while(0) 107590232a7SArnaldo Carvalho de Melo #endif /* CONFIG_SYSCTL */ 1081da177e4SLinus Torvalds #endif /* LLC_H */ 109