diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2002-09-25 06:50:09 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-09-25 06:50:09 -0700 |
| commit | 7ee01ca8a1f60fad9dc4d679b7f55b785b82d1eb (patch) | |
| tree | c216c625331187d9999cd42003a7d2a3d123b25e /include/net | |
| parent | dd18325fa22cf34f76cd78595125488888be0306 (diff) | |
| parent | b4e17e9c5b574d3560292b7c907e15a95f3de090 (diff) | |
Merge nuts.ninka.net:/home/davem/src/BK/network-2.5
into nuts.ninka.net:/home/davem/src/BK/net-2.5
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/llc_c_ev.h | 38 | ||||
| -rw-r--r-- | include/net/llc_conn.h | 11 | ||||
| -rw-r--r-- | include/net/llc_evnt.h | 24 | ||||
| -rw-r--r-- | include/net/llc_frame.h | 98 | ||||
| -rw-r--r-- | include/net/llc_if.h | 80 | ||||
| -rw-r--r-- | include/net/llc_main.h | 3 | ||||
| -rw-r--r-- | include/net/llc_name.h | 7 | ||||
| -rw-r--r-- | include/net/llc_s_ev.h | 37 | ||||
| -rw-r--r-- | include/net/llc_sap.h | 31 | ||||
| -rw-r--r-- | include/net/llc_state.h | 4 | ||||
| -rw-r--r-- | include/net/p8022.h | 9 |
11 files changed, 60 insertions, 282 deletions
diff --git a/include/net/llc_c_ev.h b/include/net/llc_c_ev.h index 2a8a0be9040b..20fbfeec34c4 100644 --- a/include/net/llc_c_ev.h +++ b/include/net/llc_c_ev.h @@ -110,38 +110,14 @@ #define LLC_CONN_EV_QFY_S_FLAG_EQ_0 11 #define LLC_CONN_EV_QFY_INIT_P_F_CYCLE 12 -/* Event data interface; what is sent in an event package */ -/* Event LLC_CONN_EV_TYPE_SIMPLE interface */ -struct llc_conn_ev_simple_if { - u8 ev; -}; - -/* Event LLC_CONN_EV_TYPE_PRIM interface */ -struct llc_conn_ev_prim_if { - u8 prim; /* connect, disconnect, reset, ... */ - u8 type; /* request, indicate, response, conf */ - struct llc_prim_if_block *data; -}; - -/* Event LLC_CONN_EV_TYPE_PDU interface */ -struct llc_conn_ev_pdu_if { - u8 ev; -}; - -union llc_conn_ev_if { - struct llc_conn_ev_simple_if a; /* 'a' for simple, easy ... */ - struct llc_conn_ev_prim_if prim; - struct llc_conn_ev_pdu_if pdu; -}; - struct llc_conn_state_ev { - u8 type; - u8 reason; - u8 status; - u8 flag; - struct llc_prim_if_block *ind_prim; - struct llc_prim_if_block *cfm_prim; - union llc_conn_ev_if data; + u8 type; + u8 prim; + u8 prim_type; + u8 reason; + u8 status; + u8 ind_prim; + u8 cfm_prim; }; static __inline__ struct llc_conn_state_ev *llc_conn_ev(struct sk_buff *skb) diff --git a/include/net/llc_conn.h b/include/net/llc_conn.h index ac0a2bb7aa22..140684e7d882 100644 --- a/include/net/llc_conn.h +++ b/include/net/llc_conn.h @@ -66,18 +66,10 @@ struct llc_opt { u32 rx_pdu_hdr; /* used for saving header of last pdu received and caused sending FRMR. Used for resending FRMR */ -#ifdef DEBUG_LLC_CONN_ALLOC - char *f_alloc, /* function that allocated this connection */ - *f_free; /* function that freed this connection */ - int l_alloc, /* line that allocated this connection */ - l_free; /* line that freed this connection */ -#endif }; #define llc_sk(__sk) ((struct llc_opt *)(__sk)->protinfo) -struct llc_conn_state_ev; - extern struct sock *llc_sk_alloc(int family, int priority); extern void llc_sk_free(struct sock *sk); @@ -100,6 +92,9 @@ extern struct sock *llc_lookup_established(struct llc_sap *sap, struct llc_addr *laddr); extern struct sock *llc_lookup_listener(struct llc_sap *sap, struct llc_addr *laddr); +extern struct sock *llc_lookup_dgram(struct llc_sap *sap, + struct llc_addr *laddr); +extern void llc_save_primitive(struct sk_buff* skb, u8 prim); extern u8 llc_data_accept_state(u8 state); extern void llc_build_offset_table(void); #endif /* LLC_CONN_H */ diff --git a/include/net/llc_evnt.h b/include/net/llc_evnt.h index 82bca6d937d6..429adcb480e3 100644 --- a/include/net/llc_evnt.h +++ b/include/net/llc_evnt.h @@ -31,26 +31,12 @@ #define LLC_STATION_EV_RX_NULL_DSAP_TEST_C 8 #define LLC_STATION_EV_DISABLE_REQ 9 -/* Interfaces for various types of supported events */ -struct llc_stat_ev_simple_if { - u8 ev; -}; - -struct llc_stat_ev_prim_if { - u8 prim; /* connect, disconnect, reset, ... */ - u8 type; /* request, indicate, response, confirm */ -}; - -union llc_stat_ev_if { - struct llc_stat_ev_simple_if a; /* 'a' for simple, easy ... */ - struct llc_stat_ev_prim_if prim; -}; - struct llc_station_state_ev { - u8 type; - u8 reason; - union llc_stat_ev_if data; - struct list_head node; /* node in station->ev_q.list */ + u8 type; + u8 prim; + u8 prim_type; + u8 reason; + struct list_head node; /* node in station->ev_q.list */ }; static __inline__ struct llc_station_state_ev * diff --git a/include/net/llc_frame.h b/include/net/llc_frame.h deleted file mode 100644 index e8fb198d19a8..000000000000 --- a/include/net/llc_frame.h +++ /dev/null @@ -1,98 +0,0 @@ -/* if_ether.h needed for definition of ETH_DATA_LEN and ETH_ALEN - */ -#include "linux/if_ether.h" - -/* frame layout based on par3.2 "LLC PDU format" - */ -typedef union { /* pdu layout from pages 40 & 44 */ - struct { /* general header, all pdu types */ - unsigned dsap : 8; /* dest service access point */ - unsigned ssap : 8; /* source service access point */ - unsigned f1 : 1; /* I- U- or S- format id bits */ - unsigned f2 : 1; - unsigned : 6; - unsigned : 8; - } pdu_hdr; - struct { - char dummy1[2]; /* dsap + ssap */ - char byte1; - char byte2; - } pdu_cntl; /* unformatted control bytes */ - struct { /* header of an Information pdu */ - unsigned char dummy2[2]; - unsigned : 1; - unsigned ns : 7; - unsigned i_pflag : 1; /* poll/final bit */ - unsigned nr : 7; /* N(R) */ - unsigned char is_info[ ETH_DATA_LEN ]; - } i_hdr; - struct { /* header of a Supervisory pdu */ - unsigned char dummy3[2]; - unsigned : 2; - unsigned ss : 2; /* supervisory function bits */ - unsigned : 4; - unsigned s_pflag : 1; /* poll/final bit */ - unsigned nr : 7; /* N(R) */ - } s_hdr; - -/* when accessing the P/F bit or the N(R) field there's no need to distinguish - I pdus from S pdus i_pflag and s_pflag / i_nr and s_nr map to the same - physical location. - */ - struct { /* header of an Unnumbered pdu */ - unsigned char dummy4[2]; - unsigned : 2; - unsigned mm1 : 2; /* modifier function part1 */ - unsigned u_pflag : 1; /* P/F for U- pdus */ - unsigned mm2 : 3; /* modifier function part2 */ - unsigned char u_info[ ETH_DATA_LEN-1]; - } u_hdr; - struct { /* mm field in an Unnumbered pdu */ - unsigned char dummy5[2]; - unsigned : 2; - unsigned mm : 6; /* must be masked to get ridd of P/F ! */ - } u_mm; - -} frame_type, *frameptr; - -/* frame format test macros: */ - -#define IS_UFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & ( (fr)->pdu_hdr.f2) ) - -#define IS_IFRAME( fr ) ( !( (fr)->pdu_hdr.f1) ) - -#define IS_SFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & !( (fr)->pdu_hdr.f2) ) - -#define IS_RSP( fr ) ( fr->pdu_hdr.ssap & 0x01 ) - - -/* The transition table, the _encode tables and some tests in the - source code depend on the numeric order of these values. - Think twice before changing. - */ - -/* frame names for TYPE 2 operation: */ -#define I_CMD 0 -#define RR_CMD 1 -#define RNR_CMD 2 -#define REJ_CMD 3 -#define DISC_CMD 4 -#define SABME_CMD 5 -#define I_RSP 6 -#define RR_RSP 7 -#define RNR_RSP 8 -#define REJ_RSP 9 -#define UA_RSP 10 -#define DM_RSP 11 -#define FRMR_RSP 12 - -/* junk frame name: */ -#define BAD_FRAME 13 -#define NO_FRAME 13 - -/* frame names for TYPE 1 operation: */ -#define UI_CMD 14 -#define XID_CMD 15 -#define TEST_CMD 16 -#define XID_RSP 17 -#define TEST_RSP 18 diff --git a/include/net/llc_if.h b/include/net/llc_if.h index 5ae7edc13649..a72591707e20 100644 --- a/include/net/llc_if.h +++ b/include/net/llc_if.h @@ -17,17 +17,17 @@ #include <linux/if_arp.h> #include <linux/llc.h> -#define LLC_DATAUNIT_PRIM 0 -#define LLC_CONN_PRIM 1 -#define LLC_DATA_PRIM 2 -#define LLC_DISC_PRIM 3 -#define LLC_RESET_PRIM 4 -#define LLC_FLOWCONTROL_PRIM 5 /* Not supported at this time */ -#define LLC_DISABLE_PRIM 6 -#define LLC_XID_PRIM 7 -#define LLC_TEST_PRIM 8 -#define LLC_SAP_ACTIVATION 9 -#define LLC_SAP_DEACTIVATION 10 +#define LLC_DATAUNIT_PRIM 1 +#define LLC_CONN_PRIM 2 +#define LLC_DATA_PRIM 3 +#define LLC_DISC_PRIM 4 +#define LLC_RESET_PRIM 5 +#define LLC_FLOWCONTROL_PRIM 6 /* Not supported at this time */ +#define LLC_DISABLE_PRIM 7 +#define LLC_XID_PRIM 8 +#define LLC_TEST_PRIM 9 +#define LLC_SAP_ACTIVATION 10 +#define LLC_SAP_DEACTIVATION 11 #define LLC_NBR_PRIMITIVES 11 @@ -67,66 +67,22 @@ struct llc_addr { u8 mac[IFHWADDRLEN]; }; -struct llc_prim_reset { - struct sock *sk; - u16 link; -}; - - /* Sending data in conection-less mode */ -struct llc_prim_unit_data { - struct llc_addr saddr; - struct llc_addr daddr; - u8 pri; - struct sk_buff *skb; /* pointer to frame */ - u8 lfb; /* largest frame bit (TR) */ -}; - -struct llc_prim_xid { - struct llc_addr saddr; - struct llc_addr daddr; - u8 pri; - struct sk_buff *skb; -}; - -struct llc_prim_test { - struct llc_addr saddr; - struct llc_addr daddr; - u8 pri; - struct sk_buff *skb; /* pointer to frame */ -}; - -union llc_u_prim_data { - struct llc_prim_reset res; - struct llc_prim_unit_data udata; /* unit data */ - struct llc_prim_xid xid; - struct llc_prim_test test; -}; - struct llc_sap; -/* Information block passed with all called primitives */ -struct llc_prim_if_block { - struct llc_sap *sap; - u8 prim; - union llc_u_prim_data *data; -}; -typedef int (*llc_prim_call_t)(struct llc_prim_if_block *prim_if); - -extern struct llc_sap *llc_sap_open(llc_prim_call_t network_indicate, - llc_prim_call_t network_confirm, u8 lsap); +extern struct llc_sap *llc_sap_open(u8 lsap, + int (*func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt)); extern void llc_sap_close(struct llc_sap *sap); extern int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap); extern int llc_build_and_send_pkt(struct sock *sk, struct sk_buff *skb); -extern void llc_build_and_send_ui_pkt(struct llc_sap *sap, - struct sk_buff *skb, +extern void llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap); -extern void llc_build_and_send_xid_pkt(struct llc_sap *sap, - struct sk_buff *skb, +extern void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap); -extern void llc_build_and_send_test_pkt(struct llc_sap *sap, - struct sk_buff *skb, +extern void llc_build_and_send_test_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap); extern int llc_send_disc(struct sock *sk); #endif /* LLC_IF_H */ diff --git a/include/net/llc_main.h b/include/net/llc_main.h index 25d486278da4..434e86044dec 100644 --- a/include/net/llc_main.h +++ b/include/net/llc_main.h @@ -43,7 +43,7 @@ struct llc_station { u8 maximum_retry; u8 mac_sa[6]; struct { - spinlock_t lock; + rwlock_t lock; struct list_head list; } sap_list; struct { @@ -52,7 +52,6 @@ struct llc_station { } ev_q; struct sk_buff_head mac_pdu_q; }; -struct llc_station_state_ev; extern struct llc_sap *llc_sap_alloc(void); extern void llc_sap_save(struct llc_sap *sap); diff --git a/include/net/llc_name.h b/include/net/llc_name.h deleted file mode 100644 index 72128719f7cc..000000000000 --- a/include/net/llc_name.h +++ /dev/null @@ -1,7 +0,0 @@ -char *frame_names[] = - {"I_CMD","RR_CMD","RNR_CMD","REJ_CMD","DISC_CMD", - "SABME_CMD","I_RSP","RR_RSP","RNR_RSP","REJ_RSP", - "UA_RSP","DM_RSP","FRMR_RSP","BAD_FRAME","UI_CMD", - "XID_CMD","TEST_CMD","XID_RSP","TEST_RSP" -}; - diff --git a/include/net/llc_s_ev.h b/include/net/llc_s_ev.h index 530042ae2be4..e3acb9329e4a 100644 --- a/include/net/llc_s_ev.h +++ b/include/net/llc_s_ev.h @@ -34,37 +34,14 @@ #define LLC_SAP_EV_RX_TEST_R 9 #define LLC_SAP_EV_DEACTIVATION_REQ 10 -/* Interfaces for various types of supported events */ -struct llc_sap_ev_simple_if { - u8 ev; -}; - -struct llc_prim_if_block; - -struct llc_sap_ev_prim_if { - u8 prim; /* connect, disconnect, reset, ... */ - u8 type; /* request, indicate, response, conf */ - struct llc_prim_if_block *data; -}; - -struct llc_sap_ev_pdu_if { - u8 ev; -}; - -union llc_sap_ev_if { - struct llc_sap_ev_simple_if a; /* 'a' for simple, easy ... */ - struct llc_sap_ev_prim_if prim; - struct llc_sap_ev_pdu_if pdu; -}; - -struct llc_prim_if_block; - struct llc_sap_state_ev { - u8 type; - u8 reason; - u8 ind_cfm_flag; - struct llc_prim_if_block *prim; - union llc_sap_ev_if data; + u8 prim; + u8 prim_type; + u8 type; + u8 reason; + u8 ind_cfm_flag; + struct llc_addr saddr; + struct llc_addr daddr; }; static __inline__ struct llc_sap_state_ev *llc_sap_ev(struct sk_buff *skb) diff --git a/include/net/llc_sap.h b/include/net/llc_sap.h index 412798ab6c0e..645e52759b36 100644 --- a/include/net/llc_sap.h +++ b/include/net/llc_sap.h @@ -12,36 +12,33 @@ * See the GNU General Public License for more details. */ #include <linux/skbuff.h> +#include <net/llc_if.h> /** * struct llc_sap - Defines the SAP component * + * @station - station this sap belongs to + * @state - sap state * @p_bit - only lowest-order bit used * @f_bit - only lowest-order bit used - * @ind - provided by network layer - * @conf - provided by network layer * @laddr - SAP value in this 'lsap' * @node - entry in station sap_list * @sk_list - LLC sockets this one manages - * @mac_pdu_q - PDUs ready to send to MAC */ struct llc_sap { - struct llc_station *parent_station; - u8 state; - u8 p_bit; - u8 f_bit; - llc_prim_call_t ind; - llc_prim_call_t conf; - struct llc_prim_if_block llc_ind_prim, llc_cfm_prim; - union llc_u_prim_data llc_ind_data_prim, llc_cfm_data_prim; - struct llc_addr laddr; - struct list_head node; + struct llc_station *station; + u8 state; + u8 p_bit; + u8 f_bit; + int (*rcv_func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt); + struct llc_addr laddr; + struct list_head node; struct { - spinlock_t lock; - struct list_head list; + rwlock_t lock; + struct sock *list; } sk_list; - struct sk_buff_head mac_pdu_q; }; -struct llc_sap_state_ev; extern void llc_sap_assign_sock(struct llc_sap *sap, struct sock *sk); extern void llc_sap_unassign_sock(struct llc_sap *sap, struct sock *sk); diff --git a/include/net/llc_state.h b/include/net/llc_state.h deleted file mode 100644 index bb18e9bd1ac8..000000000000 --- a/include/net/llc_state.h +++ /dev/null @@ -1,4 +0,0 @@ -char *state_names[] = { - "ADM","CONN","RESET_WAIT","RESET_CHECK","SETUP", - "RESET","D_CONN","ERROR","NORMAL" -}; diff --git a/include/net/p8022.h b/include/net/p8022.h index 443932810d46..3c99a86c3581 100644 --- a/include/net/p8022.h +++ b/include/net/p8022.h @@ -1,9 +1,10 @@ #ifndef _NET_P8022_H #define _NET_P8022_H -#include <net/llc_if.h> - -extern struct datalink_proto *register_8022_client(unsigned char type, - int (*indicate)(struct llc_prim_if_block *prim)); +extern struct datalink_proto * + register_8022_client(unsigned char type, + int (*func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt)); extern void unregister_8022_client(struct datalink_proto *proto); #endif |
