Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFran├žois Romieu <romieu@cogenit.fr>2002-03-06 16:48:02 -0500
committerJeff Garzik <jgarzik@mandrakesoft.com>2002-03-06 16:48:02 -0500
commitc755a9687e84bae511ea2fec2ca430fc3c79b08d (patch)
treebea0b22ca8b26ef4c1bdd275e1881274cf367ed2
parent0a1e27af6e612f17b4ca03bdc062506b8ea931e0 (diff)
WAN drivers update 5/5:
New file and directory include/linux/hdlc/ioctl.h, containing only WAN ioctl-related definitions. Update include/linux/if.h to reference these structures, providing us with complete type safety, including through ioctls.
-rw-r--r--include/linux/hdlc.h42
-rw-r--r--include/linux/hdlc/ioctl.h55
-rw-r--r--include/linux/if.h12
3 files changed, 65 insertions, 44 deletions
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h
index 6fc7b921655f..c18e217f0550 100644
--- a/include/linux/hdlc.h
+++ b/include/linux/hdlc.h
@@ -18,20 +18,6 @@
#define CLOCK_TXINT 3 /* Internal TX and external RX clock */
#define CLOCK_TXFROMRX 4 /* TX clock derived from external RX clock */
-typedef struct {
- unsigned int clock_rate; /* bits per second */
- unsigned int clock_type; /* internal, external, TX-internal etc. */
- unsigned short loopback;
-}sync_serial_settings; /* V.35, V.24, X.21 */
-
-typedef struct {
- unsigned int clock_rate; /* bits per second */
- unsigned int clock_type; /* internal, external, TX-internal etc. */
- unsigned short loopback;
- unsigned int slot_map;
-}te1_settings; /* T1, E1 */
-
-
#define ENCODING_DEFAULT 0 /* Default (current) setting */
#define ENCODING_NRZ 1
@@ -50,38 +36,11 @@ typedef struct {
#define PARITY_CRC32_PR0_CCITT 6 /* CRC32, initial value 0x00000000 */
#define PARITY_CRC32_PR1_CCITT 7 /* CRC32, initial value 0xFFFFFFFF */
-typedef struct {
- unsigned short encoding;
- unsigned short parity;
-}raw_hdlc_proto;
-
-
#define LMI_DEFAULT 0 /* Default (current) setting */
#define LMI_NONE 1 /* No LMI, all PVCs are static */
#define LMI_ANSI 2 /* ANSI Annex D */
#define LMI_CCITT 3 /* ITU-T Annex A */
-typedef struct {
- unsigned int t391;
- unsigned int t392;
- unsigned int n391;
- unsigned int n392;
- unsigned int n393;
- unsigned short lmi;
- unsigned short dce; /* 1 for DCE (network side) operation */
-}fr_proto;
-
-typedef struct {
- unsigned int dlci;
-}fr_proto_pvc; /* for creating/deleting FR PVCs */
-
-
-typedef struct {
- unsigned int interval;
- unsigned int timeout;
-}cisco_proto;
-
-
/* PPP doesn't need any info now - supply length = 0 to ioctl */
@@ -90,6 +49,7 @@ typedef struct {
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <net/syncppp.h>
+#include <linux/hdlc/ioctl.h>
#define HDLC_MAX_MTU 1500 /* Ethernet 1500 bytes */
#define HDLC_MAX_MRU (HDLC_MAX_MTU + 10) /* max 10 bytes for FR */
diff --git a/include/linux/hdlc/ioctl.h b/include/linux/hdlc/ioctl.h
new file mode 100644
index 000000000000..c35e1a35d847
--- /dev/null
+++ b/include/linux/hdlc/ioctl.h
@@ -0,0 +1,55 @@
+#ifndef __HDLC_IOCTL_H__
+#define __HDLC_IOCTL_H__
+
+typedef struct {
+ unsigned int clock_rate; /* bits per second */
+ unsigned int clock_type; /* internal, external, TX-internal etc. */
+ unsigned short loopback;
+} sync_serial_settings; /* V.35, V.24, X.21 */
+
+typedef struct {
+ unsigned int clock_rate; /* bits per second */
+ unsigned int clock_type; /* internal, external, TX-internal etc. */
+ unsigned short loopback;
+ unsigned int slot_map;
+} te1_settings; /* T1, E1 */
+
+typedef struct {
+ unsigned short encoding;
+ unsigned short parity;
+} raw_hdlc_proto;
+
+typedef struct {
+ unsigned int t391;
+ unsigned int t392;
+ unsigned int n391;
+ unsigned int n392;
+ unsigned int n393;
+ unsigned short lmi;
+ unsigned short dce; /* 1 for DCE (network side) operation */
+} fr_proto;
+
+typedef struct {
+ unsigned int dlci;
+} fr_proto_pvc; /* for creating/deleting FR PVCs */
+
+typedef struct {
+ unsigned int interval;
+ unsigned int timeout;
+} cisco_proto;
+
+/* PPP doesn't need any info now - supply length = 0 to ioctl */
+
+union hdlc_settings {
+ raw_hdlc_proto raw_hdlc;
+ cisco_proto cisco;
+ fr_proto fr;
+ fr_proto_pvc fr_pvc;
+};
+
+union line_settings {
+ sync_serial_settings sync;
+ te1_settings te1;
+};
+
+#endif /* __HDLC_IOCTL_H__ */
diff --git a/include/linux/if.h b/include/linux/if.h
index 2bba24a313a4..a46d55dd576d 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -21,6 +21,7 @@
#include <linux/types.h> /* for "__kernel_caddr_t" et al */
#include <linux/socket.h> /* for "struct sockaddr" et al */
+#include <linux/hdlc/ioctl.h>
/* Standard interface flags (netdevice->flags). */
#define IFF_UP 0x1 /* interface is up */
@@ -95,10 +96,15 @@ struct ifmap
struct if_settings
{
unsigned int type; /* Type of physical device or protocol */
- unsigned int data_length; /* device/protocol data length */
- void * data; /* pointer to data, ignored if length = 0 */
+ union {
+ /* {atm/eth/dsl}_settings anyone ? */
+ union hdlc_settings ifsu_hdlc;
+ union line_settings ifsu_line;
+ } ifs_ifsu;
};
+#define ifs_hdlc ifs_ifsu.ifsu_hdlc
+#define ifs_line ifs_ifsu.ifsu_line
/*
* Interface request structure used for socket
@@ -129,7 +135,7 @@ struct ifreq
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
char * ifru_data;
- struct if_settings ifru_settings;
+ struct if_settings *ifru_settings;
} ifr_ifru;
};