From 71d24cc6cccf45edd7e95619d429f9270a6a0d2f Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Mon, 23 Sep 2002 21:04:25 -0300 Subject: [LLC] kill sap->{ind,conf}, finally! With this one the sap->ind and ->conf callbacks are gone, now the core is tightly integrated with the socket layer (PF_LLC) and the datalink_protos are mostly working like when the old LLC stack was in the kernel, i.e. without special receiving routines for IPX in 802.2 mode, now I have to work on the UI sending routines to kill more stupid structs. --- include/net/llc_c_ev.h | 5 ++--- include/net/llc_conn.h | 3 +++ include/net/llc_if.h | 38 ++++++++++++++++++-------------------- include/net/llc_main.h | 1 + include/net/llc_s_ev.h | 1 + include/net/llc_sap.h | 11 ++++++----- include/net/p8022.h | 9 +++++---- 7 files changed, 36 insertions(+), 32 deletions(-) (limited to 'include') diff --git a/include/net/llc_c_ev.h b/include/net/llc_c_ev.h index 2a8a0be9040b..6d729ed755f1 100644 --- a/include/net/llc_c_ev.h +++ b/include/net/llc_c_ev.h @@ -138,9 +138,8 @@ 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; + u8 ind_prim; + u8 cfm_prim; union llc_conn_ev_if data; }; diff --git a/include/net/llc_conn.h b/include/net/llc_conn.h index ac0a2bb7aa22..a272c8dd8d36 100644 --- a/include/net/llc_conn.h +++ b/include/net/llc_conn.h @@ -100,6 +100,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_if.h b/include/net/llc_if.h index 5ae7edc13649..fcf4f2541f7a 100644 --- a/include/net/llc_if.h +++ b/include/net/llc_if.h @@ -17,17 +17,17 @@ #include #include -#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 @@ -110,23 +110,21 @@ struct llc_prim_if_block { 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..61b679128163 100644 --- a/include/net/llc_main.h +++ b/include/net/llc_main.h @@ -64,4 +64,5 @@ extern void llc_station_state_process(struct llc_station *station, extern void llc_station_send_pdu(struct llc_station *station, struct sk_buff *skb); extern struct sk_buff *llc_alloc_frame(void); +extern struct packet_type llc_packet_type; #endif /* LLC_MAIN_H */ diff --git a/include/net/llc_s_ev.h b/include/net/llc_s_ev.h index 530042ae2be4..7014414e318c 100644 --- a/include/net/llc_s_ev.h +++ b/include/net/llc_s_ev.h @@ -60,6 +60,7 @@ union llc_sap_ev_if { struct llc_prim_if_block; struct llc_sap_state_ev { + u8 primitive; u8 type; u8 reason; u8 ind_cfm_flag; diff --git a/include/net/llc_sap.h b/include/net/llc_sap.h index 412798ab6c0e..5d9dc00a5b36 100644 --- a/include/net/llc_sap.h +++ b/include/net/llc_sap.h @@ -12,6 +12,7 @@ * See the GNU General Public License for more details. */ #include +#include /** * struct llc_sap - Defines the SAP component * @@ -29,10 +30,9 @@ struct llc_sap { 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; + int (*rcv_func)(struct sk_buff *skb, + struct net_device *dev, + struct packet_type *pt); struct llc_addr laddr; struct list_head node; struct { @@ -45,7 +45,8 @@ 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); -extern void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb); +extern void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb, + struct packet_type *pt); extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); extern void llc_sap_send_pdu(struct llc_sap *sap, struct sk_buff *skb); #endif /* LLC_SAP_H */ 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 - -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 -- cgit v1.2.3 From 9950c8fea9d3fed4a4a97d12b5988d97ee12c6b0 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Mon, 23 Sep 2002 23:19:47 -0300 Subject: [LLC] clean up the ui sending routines and core OK, now I managed to kill the last remnants of bloated structs from LLC, I feel better now :) Also deleted include/net/llc_{frame,name,state}.h, remnants of the old LLC stack still in the tree. --- include/net/llc_c_ev.h | 37 ++++------------- include/net/llc_conn.h | 6 --- include/net/llc_evnt.h | 24 +++-------- include/net/llc_frame.h | 98 --------------------------------------------- include/net/llc_if.h | 42 -------------------- include/net/llc_name.h | 7 ---- include/net/llc_s_ev.h | 38 ++++-------------- include/net/llc_state.h | 4 -- net/llc/llc_c_ev.c | 30 +++++++------- net/llc/llc_conn.c | 2 +- net/llc/llc_evnt.c | 8 ++-- net/llc/llc_if.c | 103 +++++++++++++++++------------------------------- net/llc/llc_main.c | 2 +- net/llc/llc_s_ac.c | 24 +++++------ net/llc/llc_s_ev.c | 16 ++++---- net/llc/llc_sap.c | 9 ++--- 16 files changed, 98 insertions(+), 352 deletions(-) delete mode 100644 include/net/llc_frame.h delete mode 100644 include/net/llc_name.h delete mode 100644 include/net/llc_state.h (limited to 'include') diff --git a/include/net/llc_c_ev.h b/include/net/llc_c_ev.h index 6d729ed755f1..20fbfeec34c4 100644 --- a/include/net/llc_c_ev.h +++ b/include/net/llc_c_ev.h @@ -110,37 +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 ind_prim; - u8 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 a272c8dd8d36..ec993d032078 100644 --- a/include/net/llc_conn.h +++ b/include/net/llc_conn.h @@ -66,12 +66,6 @@ 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) 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 fcf4f2541f7a..a72591707e20 100644 --- a/include/net/llc_if.h +++ b/include/net/llc_if.h @@ -67,50 +67,8 @@ 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; -}; - extern struct llc_sap *llc_sap_open(u8 lsap, int (*func)(struct sk_buff *skb, struct net_device *dev, 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 7014414e318c..e3acb9329e4a 100644 --- a/include/net/llc_s_ev.h +++ b/include/net/llc_s_ev.h @@ -34,38 +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 primitive; - 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_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/net/llc/llc_c_ev.c b/net/llc/llc_c_ev.c index 9c699fb6b815..85c1489b0a66 100644 --- a/net/llc/llc_c_ev.c +++ b/net/llc/llc_c_ev.c @@ -101,48 +101,48 @@ int llc_conn_ev_conn_req(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_CONN_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + return ev->prim == LLC_CONN_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_conn_ev_conn_resp(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_CONN_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_RESP ? 0 : 1; + return ev->prim == LLC_CONN_PRIM && + ev->prim_type == LLC_PRIM_TYPE_RESP ? 0 : 1; } int llc_conn_ev_data_req(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_DATA_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + return ev->prim == LLC_DATA_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_conn_ev_disc_req(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_DISC_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + return ev->prim == LLC_DISC_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_conn_ev_rst_req(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_RESET_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + return ev->prim == LLC_RESET_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_conn_ev_rst_resp(struct sock *sk, struct sk_buff *skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - return ev->data.prim.prim == LLC_RESET_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_RESP ? 0 : 1; + return ev->prim == LLC_RESET_PRIM && + ev->prim_type == LLC_PRIM_TYPE_RESP ? 0 : 1; } int llc_conn_ev_local_busy_detected(struct sock *sk, struct sk_buff *skb) @@ -150,7 +150,7 @@ int llc_conn_ev_local_busy_detected(struct sock *sk, struct sk_buff *skb) struct llc_conn_state_ev *ev = llc_conn_ev(skb); return ev->type == LLC_CONN_EV_TYPE_SIMPLE && - ev->data.a.ev == LLC_CONN_EV_LOCAL_BUSY_DETECTED ? 0 : 1; + ev->prim_type == LLC_CONN_EV_LOCAL_BUSY_DETECTED ? 0 : 1; } int llc_conn_ev_local_busy_cleared(struct sock *sk, struct sk_buff *skb) @@ -158,7 +158,7 @@ int llc_conn_ev_local_busy_cleared(struct sock *sk, struct sk_buff *skb) struct llc_conn_state_ev *ev = llc_conn_ev(skb); return ev->type == LLC_CONN_EV_TYPE_SIMPLE && - ev->data.a.ev == LLC_CONN_EV_LOCAL_BUSY_CLEARED ? 0 : 1; + ev->prim_type == LLC_CONN_EV_LOCAL_BUSY_CLEARED ? 0 : 1; } int llc_conn_ev_rx_bad_pdu(struct sock *sk, struct sk_buff *skb) @@ -666,7 +666,7 @@ int llc_conn_ev_tx_buffer_full(struct sock *sk, struct sk_buff *skb) struct llc_conn_state_ev *ev = llc_conn_ev(skb); return ev->type == LLC_CONN_EV_TYPE_SIMPLE && - ev->data.a.ev == LLC_CONN_EV_TX_BUFF_FULL ? 0 : 1; + ev->prim_type == LLC_CONN_EV_TX_BUFF_FULL ? 0 : 1; } /* Event qualifier functions diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c index 1c7af4795c16..1dafb9e3c965 100644 --- a/net/llc/llc_conn.c +++ b/net/llc/llc_conn.c @@ -366,7 +366,7 @@ void llc_conn_free_ev(struct sk_buff *skb) if (LLC_PDU_TYPE_IS_I(pdu) || !ev->ind_prim) kfree_skb(skb); } else if (ev->type == LLC_CONN_EV_TYPE_PRIM && - ev->data.prim.prim != LLC_DATA_PRIM) + ev->prim != LLC_DATA_PRIM) kfree_skb(skb); else if (ev->type == LLC_CONN_EV_TYPE_P_TMR || ev->type == LLC_CONN_EV_TYPE_BUSY_TMR || diff --git a/net/llc/llc_evnt.c b/net/llc/llc_evnt.c index 181cfb29b44f..6cc65d502c44 100644 --- a/net/llc/llc_evnt.c +++ b/net/llc/llc_evnt.c @@ -29,7 +29,7 @@ int llc_stat_ev_enable_with_dup_addr_check(struct llc_station *station, struct llc_station_state_ev *ev = llc_station_ev(skb); return ev->type == LLC_STATION_EV_TYPE_SIMPLE && - ev->data.a.ev == + ev->prim_type == LLC_STATION_EV_ENABLE_WITH_DUP_ADDR_CHECK ? 0 : 1; } @@ -39,7 +39,7 @@ int llc_stat_ev_enable_without_dup_addr_check(struct llc_station *station, struct llc_station_state_ev *ev = llc_station_ev(skb); return ev->type == LLC_STATION_EV_TYPE_SIMPLE && - ev->data.a.ev == + ev->prim_type == LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK ? 0 : 1; } @@ -120,6 +120,6 @@ int llc_stat_ev_disable_req(struct llc_station *station, struct sk_buff *skb) struct llc_station_state_ev *ev = llc_station_ev(skb); return ev->type == LLC_STATION_EV_TYPE_PRIM && - ev->data.prim.prim == LLC_DISABLE_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + ev->prim == LLC_DISABLE_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } diff --git a/net/llc/llc_if.c b/net/llc/llc_if.c index 3ad1a5779602..3c6ea87a9837 100644 --- a/net/llc/llc_if.c +++ b/net/llc/llc_if.c @@ -97,24 +97,16 @@ void llc_sap_close(struct llc_sap *sap) void llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap) { - union llc_u_prim_data prim_data; - struct llc_prim_if_block prim; struct llc_sap_state_ev *ev = llc_sap_ev(skb); - prim.data = &prim_data; - prim.sap = sap; - prim.prim = LLC_DATAUNIT_PRIM; + ev->saddr.lsap = sap->laddr.lsap; + ev->daddr.lsap = dsap; + memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); + memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - prim_data.udata.skb = skb; - prim_data.udata.saddr.lsap = sap->laddr.lsap; - prim_data.udata.daddr.lsap = dsap; - memcpy(prim_data.udata.saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(prim_data.udata.daddr.mac, dmac, IFHWADDRLEN); - - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_DATAUNIT_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = &prim; + ev->type = LLC_SAP_EV_TYPE_PRIM; + ev->prim = LLC_DATAUNIT_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; llc_sap_state_process(sap, skb, &llc_packet_type); } @@ -131,24 +123,16 @@ void llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, void llc_build_and_send_test_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap) { - union llc_u_prim_data prim_data; - struct llc_prim_if_block prim; struct llc_sap_state_ev *ev = llc_sap_ev(skb); - prim.data = &prim_data; - prim.sap = sap; - prim.prim = LLC_TEST_PRIM; - - prim_data.test.skb = skb; - prim_data.test.saddr.lsap = sap->laddr.lsap; - prim_data.test.daddr.lsap = dsap; - memcpy(prim_data.test.saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(prim_data.test.daddr.mac, dmac, IFHWADDRLEN); + ev->saddr.lsap = sap->laddr.lsap; + ev->daddr.lsap = dsap; + memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); + memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_TEST_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = &prim; + ev->type = LLC_SAP_EV_TYPE_PRIM; + ev->prim = LLC_TEST_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; llc_sap_state_process(sap, skb, &llc_packet_type); } @@ -165,24 +149,16 @@ void llc_build_and_send_test_pkt(struct llc_sap *sap, void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, u8 *dmac, u8 dsap) { - union llc_u_prim_data prim_data; - struct llc_prim_if_block prim; struct llc_sap_state_ev *ev = llc_sap_ev(skb); - prim.data = &prim_data; - prim.sap = sap; - prim.prim = LLC_XID_PRIM; - - prim_data.xid.skb = skb; - prim_data.xid.saddr.lsap = sap->laddr.lsap; - prim_data.xid.daddr.lsap = dsap; - memcpy(prim_data.xid.saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); - memcpy(prim_data.xid.daddr.mac, dmac, IFHWADDRLEN); + ev->saddr.lsap = sap->laddr.lsap; + ev->daddr.lsap = dsap; + memcpy(ev->saddr.mac, skb->dev->dev_addr, IFHWADDRLEN); + memcpy(ev->daddr.mac, dmac, IFHWADDRLEN); - ev->type = LLC_SAP_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_XID_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = &prim; + ev->type = LLC_SAP_EV_TYPE_PRIM; + ev->prim = LLC_XID_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; llc_sap_state_process(sap, skb, &llc_packet_type); } @@ -217,11 +193,10 @@ int llc_build_and_send_pkt(struct sock *sk, struct sk_buff *skb) goto out; } ev = llc_conn_ev(skb); - ev->type = LLC_CONN_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_DATA_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = NULL; - skb->dev = llc->dev; + ev->type = LLC_CONN_EV_TYPE_PRIM; + ev->prim = LLC_DATA_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; + skb->dev = llc->dev; rc = llc_conn_state_process(sk, skb); out: return rc; @@ -266,10 +241,9 @@ int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap) if (skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - ev->type = LLC_CONN_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_CONN_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = NULL; + ev->type = LLC_CONN_EV_TYPE_PRIM; + ev->prim = LLC_CONN_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; rc = llc_conn_state_process(sk, skb); } out_put: @@ -304,12 +278,11 @@ int llc_send_disc(struct sock *sk) skb = alloc_skb(0, GFP_ATOMIC); if (!skb) goto out; - sk->state = TCP_CLOSING; - ev = llc_conn_ev(skb); - ev->type = LLC_CONN_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_DISC_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = NULL; + sk->state = TCP_CLOSING; + ev = llc_conn_ev(skb); + ev->type = LLC_CONN_EV_TYPE_PRIM; + ev->prim = LLC_DISC_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; rc = llc_conn_state_process(sk, skb); out: sock_put(sk); @@ -325,8 +298,7 @@ out: * it to connection component state machine. Returns 0 for success, 1 * otherwise. */ -int llc_build_and_send_reset_pkt(struct sock *sk, - struct llc_prim_if_block *prim) +int llc_build_and_send_reset_pkt(struct sock *sk) { int rc = 1; struct sk_buff *skb = alloc_skb(0, GFP_ATOMIC); @@ -334,10 +306,9 @@ int llc_build_and_send_reset_pkt(struct sock *sk, if (skb) { struct llc_conn_state_ev *ev = llc_conn_ev(skb); - ev->type = LLC_CONN_EV_TYPE_PRIM; - ev->data.prim.prim = LLC_RESET_PRIM; - ev->data.prim.type = LLC_PRIM_TYPE_REQ; - ev->data.prim.data = prim; + ev->type = LLC_CONN_EV_TYPE_PRIM; + ev->prim = LLC_RESET_PRIM; + ev->prim_type = LLC_PRIM_TYPE_REQ; rc = llc_conn_state_process(sk, skb); } return rc; diff --git a/net/llc/llc_main.c b/net/llc/llc_main.c index f84a5e26ab1c..43e231dc6dec 100644 --- a/net/llc/llc_main.c +++ b/net/llc/llc_main.c @@ -667,7 +667,7 @@ static int __init llc_init(void) llc_main_station.maximum_retry = 1; llc_main_station.state = LLC_STATION_STATE_DOWN; ev->type = LLC_STATION_EV_TYPE_SIMPLE; - ev->data.a.ev = LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK; + ev->prim_type = LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK; rc = llc_station_next_state(&llc_main_station, skb); proc_net_create("802.2", 0, llc_proc_get_info); llc_ui_init(); diff --git a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c index e3f8ff640a82..d56556925db1 100644 --- a/net/llc/llc_s_ac.c +++ b/net/llc/llc_s_ac.c @@ -51,14 +51,12 @@ int llc_sap_action_unitdata_ind(struct llc_sap *sap, struct sk_buff *skb) int llc_sap_action_send_ui(struct llc_sap *sap, struct sk_buff *skb) { struct llc_sap_state_ev *ev = llc_sap_ev(skb); - struct llc_prim_if_block *prim = ev->data.prim.data; - struct llc_prim_unit_data *prim_data = &prim->data->udata; int rc; - llc_pdu_header_init(skb, LLC_PDU_TYPE_U, prim_data->saddr.lsap, - prim_data->daddr.lsap, LLC_PDU_CMD); + llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, + ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_ui_cmd(skb); - rc = lan_hdrs_init(skb, prim_data->saddr.mac, prim_data->daddr.mac); + rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) llc_sap_send_pdu(sap, skb); return rc; @@ -76,14 +74,12 @@ int llc_sap_action_send_ui(struct llc_sap *sap, struct sk_buff *skb) int llc_sap_action_send_xid_c(struct llc_sap *sap, struct sk_buff *skb) { struct llc_sap_state_ev *ev = llc_sap_ev(skb); - struct llc_prim_if_block *prim = ev->data.prim.data; - struct llc_prim_xid *prim_data = &prim->data->xid; int rc; - llc_pdu_header_init(skb, LLC_PDU_TYPE_U, prim_data->saddr.lsap, - prim_data->daddr.lsap, LLC_PDU_CMD); + llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, + ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_xid_cmd(skb, LLC_XID_NULL_CLASS_2, 0); - rc = lan_hdrs_init(skb, prim_data->saddr.mac, prim_data->daddr.mac); + rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) llc_sap_send_pdu(sap, skb); return rc; @@ -132,14 +128,12 @@ out: int llc_sap_action_send_test_c(struct llc_sap *sap, struct sk_buff *skb) { struct llc_sap_state_ev *ev = llc_sap_ev(skb); - struct llc_prim_if_block *prim = ev->data.prim.data; - struct llc_prim_test *prim_data = &prim->data->test; int rc; - llc_pdu_header_init(skb, LLC_PDU_TYPE_U, prim_data->saddr.lsap, - prim_data->daddr.lsap, LLC_PDU_CMD); + llc_pdu_header_init(skb, LLC_PDU_TYPE_U, ev->saddr.lsap, + ev->daddr.lsap, LLC_PDU_CMD); llc_pdu_init_as_test_cmd(skb); - rc = lan_hdrs_init(skb, prim_data->saddr.mac, prim_data->daddr.mac); + rc = lan_hdrs_init(skb, ev->saddr.mac, ev->daddr.mac); if (!rc) llc_sap_send_pdu(sap, skb); return rc; diff --git a/net/llc/llc_s_ev.c b/net/llc/llc_s_ev.c index 6d172d0eee3a..3b1e02f88dcd 100644 --- a/net/llc/llc_s_ev.c +++ b/net/llc/llc_s_ev.c @@ -25,7 +25,7 @@ int llc_sap_ev_activation_req(struct llc_sap *sap, struct sk_buff *skb) struct llc_sap_state_ev *ev = llc_sap_ev(skb); return ev->type == LLC_SAP_EV_TYPE_SIMPLE && - ev->data.a.ev == LLC_SAP_EV_ACTIVATION_REQ ? 0 : 1; + ev->prim_type == LLC_SAP_EV_ACTIVATION_REQ ? 0 : 1; } int llc_sap_ev_rx_ui(struct llc_sap *sap, struct sk_buff *skb) @@ -43,8 +43,8 @@ int llc_sap_ev_unitdata_req(struct llc_sap *sap, struct sk_buff *skb) struct llc_sap_state_ev *ev = llc_sap_ev(skb); return ev->type == LLC_SAP_EV_TYPE_PRIM && - ev->data.prim.prim == LLC_DATAUNIT_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + ev->prim == LLC_DATAUNIT_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } @@ -53,8 +53,8 @@ int llc_sap_ev_xid_req(struct llc_sap *sap, struct sk_buff *skb) struct llc_sap_state_ev *ev = llc_sap_ev(skb); return ev->type == LLC_SAP_EV_TYPE_PRIM && - ev->data.prim.prim == LLC_XID_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + ev->prim == LLC_XID_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_sap_ev_rx_xid_c(struct llc_sap *sap, struct sk_buff *skb) @@ -82,8 +82,8 @@ int llc_sap_ev_test_req(struct llc_sap *sap, struct sk_buff *skb) struct llc_sap_state_ev *ev = llc_sap_ev(skb); return ev->type == LLC_SAP_EV_TYPE_PRIM && - ev->data.prim.prim == LLC_TEST_PRIM && - ev->data.prim.type == LLC_PRIM_TYPE_REQ ? 0 : 1; + ev->prim == LLC_TEST_PRIM && + ev->prim_type == LLC_PRIM_TYPE_REQ ? 0 : 1; } int llc_sap_ev_rx_test_c(struct llc_sap *sap, struct sk_buff *skb) @@ -111,5 +111,5 @@ int llc_sap_ev_deactivation_req(struct llc_sap *sap, struct sk_buff *skb) struct llc_sap_state_ev *ev = llc_sap_ev(skb); return ev->type == LLC_SAP_EV_TYPE_SIMPLE && - ev->data.a.ev == LLC_SAP_EV_DEACTIVATION_REQ ? 0 : 1; + ev->prim_type == LLC_SAP_EV_DEACTIVATION_REQ ? 0 : 1; } diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index d84c9e67fd15..9dddee811b18 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c @@ -93,7 +93,7 @@ void llc_sap_state_process(struct llc_sap *sap, struct sk_buff *skb, if (skb->sk->state == TCP_LISTEN) goto drop; - llc_save_primitive(skb, ev->primitive); + llc_save_primitive(skb, ev->prim); /* queue skb to the user. */ if (sock_queue_rcv_skb(skb->sk, skb)) @@ -118,14 +118,13 @@ void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb) pdu = llc_pdu_un_hdr(skb); switch (LLC_U_PDU_RSP(pdu)) { case LLC_1_PDU_CMD_TEST: - ev->primitive = LLC_TEST_PRIM; break; + ev->prim = LLC_TEST_PRIM; break; case LLC_1_PDU_CMD_XID: - ev->primitive = LLC_XID_PRIM; break; + ev->prim = LLC_XID_PRIM; break; case LLC_1_PDU_CMD_UI: - ev->primitive = LLC_DATAUNIT_PRIM; break; + ev->prim = LLC_DATAUNIT_PRIM; break; } ev->ind_cfm_flag = LLC_IND; - ev->prim = NULL; } /** -- cgit v1.2.3