summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@conectiva.com.br>2002-09-23 23:19:47 -0300
committerDavid S. Miller <davem@nuts.ninka.net>2002-09-23 23:19:47 -0300
commit9950c8fea9d3fed4a4a97d12b5988d97ee12c6b0 (patch)
treed472ebe78213938e91a050c69e67361c97fd06e6
parent71d24cc6cccf45edd7e95619d429f9270a6a0d2f (diff)
[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.
-rw-r--r--include/net/llc_c_ev.h37
-rw-r--r--include/net/llc_conn.h6
-rw-r--r--include/net/llc_evnt.h24
-rw-r--r--include/net/llc_frame.h98
-rw-r--r--include/net/llc_if.h42
-rw-r--r--include/net/llc_name.h7
-rw-r--r--include/net/llc_s_ev.h38
-rw-r--r--include/net/llc_state.h4
-rw-r--r--net/llc/llc_c_ev.c30
-rw-r--r--net/llc/llc_conn.c2
-rw-r--r--net/llc/llc_evnt.c8
-rw-r--r--net/llc/llc_if.c103
-rw-r--r--net/llc/llc_main.c2
-rw-r--r--net/llc/llc_s_ac.c24
-rw-r--r--net/llc/llc_s_ev.c16
-rw-r--r--net/llc/llc_sap.c9
16 files changed, 98 insertions, 352 deletions
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;
}
/**