summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.ninka.net>2002-09-25 06:50:09 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2002-09-25 06:50:09 -0700
commit7ee01ca8a1f60fad9dc4d679b7f55b785b82d1eb (patch)
treec216c625331187d9999cd42003a7d2a3d123b25e /include/net
parentdd18325fa22cf34f76cd78595125488888be0306 (diff)
parentb4e17e9c5b574d3560292b7c907e15a95f3de090 (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.h38
-rw-r--r--include/net/llc_conn.h11
-rw-r--r--include/net/llc_evnt.h24
-rw-r--r--include/net/llc_frame.h98
-rw-r--r--include/net/llc_if.h80
-rw-r--r--include/net/llc_main.h3
-rw-r--r--include/net/llc_name.h7
-rw-r--r--include/net/llc_s_ev.h37
-rw-r--r--include/net/llc_sap.h31
-rw-r--r--include/net/llc_state.h4
-rw-r--r--include/net/p8022.h9
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