FreeBSD/Linux Kernel Cross Reference
sys/port/netif.h
1 typedef struct Etherpkt Etherpkt;
2 typedef struct Netaddr Netaddr;
3 typedef struct Netfile Netfile;
4 typedef struct Netif Netif;
5
6 enum
7 {
8 Nmaxaddr= 64,
9 Nmhash= 31,
10
11 Ncloneqid= 1,
12 Naddrqid,
13 N2ndqid,
14 N3rdqid,
15 Ndataqid,
16 Nctlqid,
17 Nstatqid,
18 Ntypeqid,
19 Nifstatqid,
20 };
21
22 /*
23 * Macros to manage Qid's used for multiplexed devices
24 */
25 #define NETTYPE(x) (((ulong)x)&0x1f)
26 #define NETID(x) ((((ulong)x))>>5)
27 #define NETQID(i,t) ((((ulong)i)<<5)|(t))
28
29 /*
30 * one per multiplexed connection
31 */
32 struct Netfile
33 {
34 QLock;
35
36 int inuse;
37 ulong mode;
38 char owner[KNAMELEN];
39
40 int type; /* multiplexor type */
41 int prom; /* promiscuous mode */
42 int scan; /* base station scanning interval */
43 int bridge; /* bridge mode */
44 int headersonly; /* headers only - no data */
45 uchar maddr[8]; /* bitmask of multicast addresses requested */
46 int nmaddr; /* number of multicast addresses */
47
48 Queue *in; /* input buffer */
49 };
50
51 /*
52 * a network address
53 */
54 struct Netaddr
55 {
56 Netaddr *next; /* allocation chain */
57 Netaddr *hnext;
58 uchar addr[Nmaxaddr];
59 int ref;
60 };
61
62 /*
63 * a network interface
64 */
65 struct Netif
66 {
67 QLock;
68
69 /* multiplexing */
70 char name[KNAMELEN]; /* for top level directory */
71 int nfile; /* max number of Netfiles */
72 Netfile **f;
73
74 /* about net */
75 int limit; /* flow control */
76 int alen; /* address length */
77 int mbps; /* megabits per sec */
78 int link; /* link status */
79 uchar addr[Nmaxaddr];
80 uchar bcast[Nmaxaddr];
81 Netaddr *maddr; /* known multicast addresses */
82 int nmaddr; /* number of known multicast addresses */
83 Netaddr *mhash[Nmhash]; /* hash table of multicast addresses */
84 int prom; /* number of promiscuous opens */
85 int scan; /* number of base station scanners */
86 int all; /* number of -1 multiplexors */
87
88 /* statistics */
89 int misses;
90 uvlong inpackets;
91 uvlong outpackets;
92 int crcs; /* input crc errors */
93 int oerrs; /* output errors */
94 int frames; /* framing errors */
95 int overflows; /* packet overflows */
96 int buffs; /* buffering errors */
97 int soverflows; /* software overflow */
98
99 /* routines for touching the hardware */
100 void *arg;
101 void (*promiscuous)(void*, int);
102 void (*multicast)(void*, uchar*, int);
103 void (*scanbs)(void*, uint); /* scan for base stations */
104 };
105
106 void netifinit(Netif*, char*, int, ulong);
107 Walkqid* netifwalk(Netif*, Chan*, Chan*, char **, int);
108 Chan* netifopen(Netif*, Chan*, int);
109 void netifclose(Netif*, Chan*);
110 long netifread(Netif*, Chan*, void*, long, ulong);
111 Block* netifbread(Netif*, Chan*, long, ulong);
112 long netifwrite(Netif*, Chan*, void*, long);
113 int netifwstat(Netif*, Chan*, uchar*, int);
114 int netifstat(Netif*, Chan*, uchar*, int);
115 int activemulti(Netif*, uchar*, int);
116
117 /*
118 * Ethernet specific
119 */
120 enum
121 {
122 Eaddrlen= 6,
123 ETHERMINTU = 60, /* minimum transmit size */
124 ETHERMAXTU = 1514, /* maximum transmit size */
125 ETHERHDRSIZE = 14, /* size of an ethernet header */
126
127 /* ethernet packet types */
128 ETARP = 0x0806,
129 ETIP4 = 0x0800,
130 ETIP6 = 0x86DD,
131 };
132
133 struct Etherpkt
134 {
135 uchar d[Eaddrlen];
136 uchar s[Eaddrlen];
137 uchar type[2];
138 uchar data[1500];
139 };
Cache object: 4830d3b637e347fa745e0f21057cbca3
|