summaryrefslogtreecommitdiff
path: root/sys/src/cmd/unix/drawterm/kern/netif.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/unix/drawterm/kern/netif.h
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/unix/drawterm/kern/netif.h')
-rwxr-xr-xsys/src/cmd/unix/drawterm/kern/netif.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/sys/src/cmd/unix/drawterm/kern/netif.h b/sys/src/cmd/unix/drawterm/kern/netif.h
new file mode 100755
index 000000000..06c42aec8
--- /dev/null
+++ b/sys/src/cmd/unix/drawterm/kern/netif.h
@@ -0,0 +1,133 @@
+typedef struct Etherpkt Etherpkt;
+typedef struct Netaddr Netaddr;
+typedef struct Netfile Netfile;
+typedef struct Netif Netif;
+
+enum
+{
+ Nmaxaddr= 64,
+ Nmhash= 31,
+
+ Ncloneqid= 1,
+ Naddrqid,
+ N2ndqid,
+ N3rdqid,
+ Ndataqid,
+ Nctlqid,
+ Nstatqid,
+ Ntypeqid,
+ Nifstatqid,
+};
+
+/*
+ * Macros to manage Qid's used for multiplexed devices
+ */
+#define NETTYPE(x) (((ulong)x)&0x1f)
+#define NETID(x) ((((ulong)x))>>5)
+#define NETQID(i,t) ((((ulong)i)<<5)|(t))
+
+/*
+ * one per multiplexed connection
+ */
+struct Netfile
+{
+ QLock lk;
+
+ int inuse;
+ ulong mode;
+ char owner[KNAMELEN];
+
+ int type; /* multiplexor type */
+ int prom; /* promiscuous mode */
+ int scan; /* base station scanning interval */
+ int bridge; /* bridge mode */
+ int headersonly; /* headers only - no data */
+ uchar maddr[8]; /* bitmask of multicast addresses requested */
+ int nmaddr; /* number of multicast addresses */
+
+ Queue *in; /* input buffer */
+};
+
+/*
+ * a network address
+ */
+struct Netaddr
+{
+ Netaddr *next; /* allocation chain */
+ Netaddr *hnext;
+ uchar addr[Nmaxaddr];
+ int ref;
+};
+
+/*
+ * a network interface
+ */
+struct Netif
+{
+ QLock lk;
+
+ /* multiplexing */
+ char name[KNAMELEN]; /* for top level directory */
+ int nfile; /* max number of Netfiles */
+ Netfile **f;
+
+ /* about net */
+ int limit; /* flow control */
+ int alen; /* address length */
+ int mbps; /* megabits per sec */
+ uchar addr[Nmaxaddr];
+ uchar bcast[Nmaxaddr];
+ Netaddr *maddr; /* known multicast addresses */
+ int nmaddr; /* number of known multicast addresses */
+ Netaddr *mhash[Nmhash]; /* hash table of multicast addresses */
+ int prom; /* number of promiscuous opens */
+ int scan; /* number of base station scanners */
+ int all; /* number of -1 multiplexors */
+
+ /* statistics */
+ int misses;
+ int inpackets;
+ int outpackets;
+ int crcs; /* input crc errors */
+ int oerrs; /* output errors */
+ int frames; /* framing errors */
+ int overflows; /* packet overflows */
+ int buffs; /* buffering errors */
+ int soverflows; /* software overflow */
+
+ /* routines for touching the hardware */
+ void *arg;
+ void (*promiscuous)(void*, int);
+ void (*multicast)(void*, uchar*, int);
+ void (*scanbs)(void*, uint); /* scan for base stations */
+};
+
+void netifinit(Netif*, char*, int, ulong);
+Walkqid* netifwalk(Netif*, Chan*, Chan*, char **, int);
+Chan* netifopen(Netif*, Chan*, int);
+void netifclose(Netif*, Chan*);
+long netifread(Netif*, Chan*, void*, long, ulong);
+Block* netifbread(Netif*, Chan*, long, ulong);
+long netifwrite(Netif*, Chan*, void*, long);
+int netifwstat(Netif*, Chan*, uchar*, int);
+int netifstat(Netif*, Chan*, uchar*, int);
+int activemulti(Netif*, uchar*, int);
+
+/*
+ * Ethernet specific
+ */
+enum
+{
+ Eaddrlen= 6,
+ ETHERMINTU = 60, /* minimum transmit size */
+ ETHERMAXTU = 1514, /* maximum transmit size */
+ ETHERHDRSIZE = 14, /* size of an ethernet header */
+};
+
+struct Etherpkt
+{
+ uchar d[Eaddrlen];
+ uchar s[Eaddrlen];
+ uchar type[2];
+ uchar data[1500];
+};