fdf09a2013803c2e3af0e49b1dc90f732a182235
[openwrt/svn-archive/archive.git] / openwrt / package / iptraf / patches / iptraf-2.7.0-ifaces.patch
1 diff -ruN iptraf-2.7.0-old/src/dirs.h iptraf-2.7.0-new/src/dirs.h
2 --- iptraf-2.7.0-old/src/dirs.h 2001-05-03 12:44:11.000000000 +0200
3 +++ iptraf-2.7.0-new/src/dirs.h 2005-10-04 21:51:26.000000000 +0200
4 @@ -148,11 +148,10 @@
5 #define PORTFILE get_path(T_WORKDIR, "ports.dat")
6
7 /*
8 - * The Ethernet and FDDI host description files
9 + * The Ethernet host description files
10 */
11
12 #define ETHFILE get_path(T_WORKDIR, "ethernet.desc")
13 -#define FDDIFILE get_path(T_WORKDIR, "fddi.desc")
14
15 /*
16 * The rvnamed program file
17 diff -ruN iptraf-2.7.0-old/src/hostmon.c iptraf-2.7.0-new/src/hostmon.c
18 --- iptraf-2.7.0-old/src/hostmon.c 2002-04-16 04:15:25.000000000 +0200
19 +++ iptraf-2.7.0-new/src/hostmon.c 2005-10-04 21:52:02.000000000 +0200
20 @@ -30,7 +30,6 @@
21 #include <netinet/in.h>
22 #include <linux/if_packet.h>
23 #include <linux/if_ether.h>
24 -#include <linux/if_fddi.h>
25 #include <linux/if_tr.h>
26 #include <net/if_arp.h>
27 #include <stdlib.h>
28 @@ -294,8 +293,6 @@
29 wprintw(table->tabwin, "Ethernet");
30 else if (entry->un.desc.linktype == LINK_PLIP)
31 wprintw(table->tabwin, "PLIP");
32 - else if (entry->un.desc.linktype == LINK_FDDI)
33 - wprintw(table->tabwin, "FDDI");
34
35 wprintw(table->tabwin, " HW addr: %s", entry->un.desc.ascaddr);
36
37 @@ -771,7 +768,6 @@
38
39 initethtab(&table, options->actmode);
40 loaddesclist(&elist, LINK_ETHERNET, WITHETCETHERS);
41 - loaddesclist(&flist, LINK_FDDI, WITHETCETHERS);
42
43 if (logging) {
44 if (strcmp(current_logfile, "") == 0)
45 @@ -854,7 +850,7 @@
46 }
47 linktype = getlinktype(fromaddr.sll_hatype, ifname, -1, NULL);
48
49 - if ((linktype == LINK_ETHERNET) || (linktype == LINK_FDDI)
50 + if ((linktype == LINK_ETHERNET)
51 || (linktype == LINK_PLIP) || (linktype == LINK_TR)) {
52 if (fromaddr.sll_protocol == htons(ETH_P_IP))
53 is_ip = 1;
54 @@ -871,12 +867,6 @@
55 memcpy(scratch_daddr, ((struct ethhdr *) buf)->h_dest,
56 ETH_ALEN);
57 list = &elist;
58 - } else if (linktype == LINK_FDDI) {
59 - memcpy(scratch_saddr, ((struct fddihdr *) buf)->saddr,
60 - FDDI_K_ALEN);
61 - memcpy(scratch_daddr, ((struct fddihdr *) buf)->daddr,
62 - FDDI_K_ALEN);
63 - list = &flist;
64 } else if (linktype == LINK_TR) {
65 memcpy(scratch_saddr, ((struct trh_hdr *) buf)->saddr,
66 TR_ALEN);
67 diff -ruN iptraf-2.7.0-old/src/ifaces.c iptraf-2.7.0-new/src/ifaces.c
68 --- iptraf-2.7.0-old/src/ifaces.c 2002-05-08 11:43:27.000000000 +0200
69 +++ iptraf-2.7.0-new/src/ifaces.c 2005-10-04 21:54:00.000000000 +0200
70 @@ -37,9 +37,9 @@
71 extern int daemonized;
72
73 char ifaces[][6] =
74 - { "lo", "eth", "sl", "ppp", "ippp", "plip", "fddi", "isdn", "dvb",
75 + { "lo", "eth", "sl", "ppp", "ippp", "plip", "isdn", "dvb",
76 "pvc", "hdlc", "ipsec", "sbni", "tr", "wvlan", "wlan", "sm2", "sm3",
77 - "pent", "lec" };
78 + "pent", "lec", "vlan" };
79
80 char *ltrim(char *buf)
81 {
82 diff -ruN iptraf-2.7.0-old/src/landesc.c iptraf-2.7.0-new/src/landesc.c
83 --- iptraf-2.7.0-old/src/landesc.c 2001-11-27 11:23:32.000000000 +0100
84 +++ iptraf-2.7.0-new/src/landesc.c 2005-10-04 21:57:33.000000000 +0200
85 @@ -82,8 +82,6 @@
86
87 if (linktype == LINK_ETHERNET)
88 fd = fopen(ETHFILE, "r");
89 - else if (linktype == LINK_FDDI)
90 - fd = fopen(FDDIFILE, "r");
91
92 if (fd == NULL) {
93 return;
94 @@ -204,8 +202,6 @@
95
96 if (linktype == LINK_ETHERNET)
97 fd = fopen(ETHFILE, "w");
98 - else if (linktype == LINK_FDDI)
99 - fd = fopen(FDDIFILE, "w");
100
101 if (fd < 0) {
102 etherr();
103 diff -ruN iptraf-2.7.0-old/src/links.h iptraf-2.7.0-new/src/links.h
104 --- iptraf-2.7.0-old/src/links.h 2001-12-18 03:45:16.000000000 +0100
105 +++ iptraf-2.7.0-new/src/links.h 2005-10-04 21:57:17.000000000 +0200
106 @@ -5,7 +5,6 @@
107 #define LINK_LOOPBACK 5
108 #define LINK_ISDN_RAWIP 6
109 #define LINK_ISDN_CISCOHDLC 7
110 -#define LINK_FDDI 8
111 #define LINK_FRAD 9
112 #define LINK_DLCI 10
113 #define LINK_TR 11
114 diff -ruN iptraf-2.7.0-old/src/log.c iptraf-2.7.0-new/src/log.c
115 --- iptraf-2.7.0-old/src/log.c 2002-04-22 05:59:15.000000000 +0200
116 +++ iptraf-2.7.0-new/src/log.c 2005-10-04 21:57:51.000000000 +0200
117 @@ -465,8 +465,6 @@
118 ptmp->un.desc.ascaddr);
119 else if (ptmp->un.desc.linktype == LINK_PLIP)
120 fprintf(fd, "\nPLIP address: %s", ptmp->un.desc.ascaddr);
121 - else if (ptmp->un.desc.linktype == LINK_FDDI)
122 - fprintf(fd, "\nFDDI address: %s", ptmp->un.desc.ascaddr);
123
124 if (ptmp->un.desc.withdesc)
125 fprintf(fd, " (%s)", ptmp->un.desc.desc);
126 diff -ruN iptraf-2.7.0-old/src/options.c iptraf-2.7.0-new/src/options.c
127 --- iptraf-2.7.0-old/src/options.c 2001-12-28 10:39:15.000000000 +0100
128 +++ iptraf-2.7.0-new/src/options.c 2005-10-04 21:58:15.000000000 +0200
129 @@ -67,8 +67,6 @@
130 tx_additem(menu, NULL, NULL);
131 tx_additem(menu, " ^E^thernet/PLIP host descriptions...",
132 "Manages descriptions for Ethernet and PLIP addresses");
133 - tx_additem(menu, " ^F^DDI/Token Ring host descriptions...",
134 - "Manages descriptions for FDDI and FDDI addresses");
135 tx_additem(menu, NULL, NULL);
136 tx_additem(menu, " E^x^it configuration", "Returns to main menu");
137 }
138 @@ -366,9 +364,6 @@
139 case 14:
140 ethdescmgr(LINK_ETHERNET);
141 break;
142 - case 15:
143 - ethdescmgr(LINK_FDDI);
144 - break;
145 }
146
147 indicatesetting(row, options, statwin);
148 diff -ruN iptraf-2.7.0-old/src/othptab.c iptraf-2.7.0-new/src/othptab.c
149 --- iptraf-2.7.0-old/src/othptab.c 2001-12-28 03:23:59.000000000 +0100
150 +++ iptraf-2.7.0-new/src/othptab.c 2005-10-04 21:58:33.000000000 +0200
151 @@ -19,7 +19,6 @@
152 #include <asm/types.h>
153 #include <linux/if_ether.h>
154 #include <linux/if_tr.h>
155 -#include <linux/if_fddi.h>
156 #include <winops.h>
157 #include "arphdr.h"
158 #include "options.h"
159 @@ -139,11 +138,6 @@
160 new_entry->smacaddr);
161 convmacaddr(((struct ethhdr *) packet)->h_dest,
162 new_entry->dmacaddr);
163 - } else if (linkproto == LINK_FDDI) {
164 - convmacaddr(((struct fddihdr *) packet)->saddr,
165 - new_entry->smacaddr);
166 - convmacaddr(((struct fddihdr *) packet)->daddr,
167 - new_entry->dmacaddr);
168 } else if (linkproto == LINK_TR) {
169 convmacaddr(((struct trh_hdr *) packet)->saddr,
170 new_entry->smacaddr);
171 @@ -373,8 +367,7 @@
172 strcat(msgstring, scratchpad);
173
174 if ((entry->linkproto == LINK_ETHERNET) ||
175 - (entry->linkproto == LINK_PLIP) ||
176 - (entry->linkproto == LINK_FDDI)) {
177 + (entry->linkproto == LINK_PLIP)) {
178 sprintf(scratchpad, " from %s to %s on %s",
179 entry->smacaddr, entry->dmacaddr, entry->iface);
180
181 diff -ruN iptraf-2.7.0-old/src/packet.c iptraf-2.7.0-new/src/packet.c
182 --- iptraf-2.7.0-old/src/packet.c 2002-05-08 11:44:08.000000000 +0200
183 +++ iptraf-2.7.0-new/src/packet.c 2005-10-04 21:59:12.000000000 +0200
184 @@ -35,7 +35,6 @@
185 #include <sys/ioctl.h>
186 #include <linux/if_packet.h>
187 #include <linux/if_ether.h>
188 -#include <linux/if_fddi.h>
189 #include <linux/if_tr.h>
190 #include <linux/isdn.h>
191 #include <linux/sockios.h>
192 @@ -80,10 +79,10 @@
193 case ARPHRD_ETHER:
194 if (strncmp(ifname, "eth", 3) == 0)
195 result = LINK_ETHERNET;
196 + else if (strncmp(ifname, "vlan", 4) == 0)
197 + result = LINK_ETHERNET;
198 else if (strncmp(ifname, "plip", 4) == 0)
199 result = LINK_PLIP;
200 - else if (strncmp(ifname, "fddi", 4) == 0) /* For some Ethernet- */
201 - result = LINK_ETHERNET; /* emulated FDDI ifaces */
202 else if (strncmp(ifname, "dvb", 3) == 0)
203 result = LINK_ETHERNET;
204 else if (strncmp(ifname, "sbni", 4) == 0)
205 @@ -127,9 +126,6 @@
206 case ARPHRD_PPP:
207 result = LINK_PPP;
208 break;
209 - case ARPHRD_FDDI:
210 - result = LINK_FDDI;
211 - break;
212 case ARPHRD_IEEE802:
213 case ARPHRD_IEEE802_TR:
214 result = LINK_TR;
215 @@ -179,19 +175,6 @@
216 *packet = tpacket + 4;
217 *readlen -= 4;
218 break;
219 - case LINK_FDDI:
220 - *packet = tpacket + sizeof(struct fddihdr);
221 - *readlen -= sizeof(struct fddihdr);
222 -
223 - /*
224 - * Move IP data into an aligned buffer. 96 bytes should be sufficient
225 - * for IP and TCP headers with reasonable numbers of options and some
226 - * data.
227 - */
228 -
229 - memmove(aligned_buf, *packet, min(SNAPSHOT_LEN, *readlen));
230 - *packet = aligned_buf;
231 - break;
232 case LINK_TR:
233 /*
234 * Token Ring patch supplied by Tomas Dvorak
235 diff -ruN iptraf-2.7.0-old/src/promisc.c iptraf-2.7.0-new/src/promisc.c
236 --- iptraf-2.7.0-old/src/promisc.c 2002-01-16 02:51:03.000000000 +0100
237 +++ iptraf-2.7.0-new/src/promisc.c 2005-10-04 22:05:25.000000000 +0200
238 @@ -81,7 +81,7 @@
239 */
240
241 if ((strncmp(buf, "eth", 3) == 0) ||
242 - (strncmp(buf, "fddi", 4) == 0) ||
243 + (strncmp(buf, "vlan", 4) == 0) ||
244 (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
245 (strncmp(ptmp->params.ifname, "lec", 3) == 0) ||
246 (accept_unsupported_interfaces)) {
247 @@ -194,7 +194,7 @@
248
249 while (ptmp != NULL) {
250 if (((strncmp(ptmp->params.ifname, "eth", 3) == 0) ||
251 - (strncmp(ptmp->params.ifname, "fddi", 4) == 0) ||
252 + (strncmp(ptmp->params.ifname, "vlan", 4) == 0) ||
253 (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
254 (strncmp(ptmp->params.ifname, "lec", 3) == 0)) &&
255 (ptmp->params.state_valid)) {
256 diff -ruN iptraf-2.7.0-old/src/promisc.~c iptraf-2.7.0-new/src/promisc.~c
257 --- iptraf-2.7.0-old/src/promisc.~c 1970-01-01 01:00:00.000000000 +0100
258 +++ iptraf-2.7.0-new/src/promisc.~c 2005-10-04 22:00:02.000000000 +0200
259 @@ -0,0 +1,238 @@
260 +/***
261 +
262 +promisc.c - handles the promiscuous mode flag for the Ethernet/FDDI
263 + interfaces
264 +
265 +Written by Gerard Paul Java
266 +Copyright (c) Gerard Paul Java 1997, 1998
267 +
268 +This module contains functions that manage the promiscuous states of
269 +the interfaces.
270 +
271 +This software is open source; you can redistribute it and/or modify
272 +it under the terms of the GNU General Public License as published by
273 +the Free Software Foundation; either version 2 of the License, or
274 +(at your option) any later version.
275 +
276 +This program is distributed WITHOUT ANY WARRANTY; without even the
277 +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
278 +See the GNU General Public License in the included COPYING file for
279 +details.
280 +
281 +***/
282 +
283 +#include <curses.h>
284 +#include <panel.h>
285 +#include <sys/ioctl.h>
286 +#include <sys/socket.h>
287 +#include <sys/types.h>
288 +#include <sys/stat.h>
289 +#include <fcntl.h>
290 +#include <unistd.h>
291 +#include <stdlib.h>
292 +#include <string.h>
293 +#include <netinet/in.h>
294 +#include <net/if.h>
295 +#include <linux/if_ether.h>
296 +#include "ifstats.h"
297 +#include "ifaces.h"
298 +#include "error.h"
299 +#include "promisc.h"
300 +#include "dirs.h"
301 +
302 +#define PROMISC_MSG_MAX 80
303 +
304 +extern int daemonized;
305 +extern int accept_unsupported_interfaces;
306 +
307 +void init_promisc_list(struct promisc_states **list)
308 +{
309 + FILE *fd;
310 + int ifd;
311 + char buf[8];
312 + struct promisc_states *ptmp;
313 + struct promisc_states *tail = NULL;
314 + struct ifreq ifr;
315 + int istat;
316 + char err_msg[80];
317 +
318 + ifd = socket(PF_INET, SOCK_DGRAM, 0);
319 +
320 + *list = NULL;
321 + fd = open_procnetdev();
322 +
323 + do {
324 + get_next_iface(fd, buf);
325 +
326 + if (strcmp(buf, "") != 0) {
327 + ptmp = malloc(sizeof(struct promisc_states));
328 + strcpy(ptmp->params.ifname, buf);
329 +
330 + if (*list == NULL) {
331 + *list = ptmp;
332 + } else
333 + tail->next_entry = ptmp;
334 +
335 + tail = ptmp;
336 + ptmp->next_entry = NULL;
337 +
338 + /*
339 + * Retrieve and save interface flags
340 + */
341 +
342 + if ((strncmp(buf, "eth", 3) == 0) ||
343 + (strncmp(buf, "vlan", 4) == 0) ||
344 + (strncmp(buf, "fddi", 4) == 0) ||
345 + (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
346 + (strncmp(ptmp->params.ifname, "lec", 3) == 0) ||
347 + (accept_unsupported_interfaces)) {
348 + strcpy(ifr.ifr_name, buf);
349 +
350 + istat = ioctl(ifd, SIOCGIFFLAGS, &ifr);
351 +
352 + if (istat < 0) {
353 + sprintf(err_msg,
354 + "Unable to obtain interface parameters for %s",
355 + buf);
356 + write_error(err_msg, daemonized);
357 + ptmp->params.state_valid = 0;
358 + } else {
359 + ptmp->params.saved_state = ifr.ifr_flags;
360 + ptmp->params.state_valid = 1;
361 + }
362 + }
363 + }
364 + } while (strcmp(buf, "") != 0);
365 +}
366 +
367 +/*
368 + * Save interfaces and their states to a temporary file. Used only by the
369 + * first IPTraf instance. Needed in case there are subsequent, simultaneous
370 + * instances of IPTraf, which may still need promiscuous mode even after
371 + * the first instance exits. These subsequent instances will need to restore
372 + * the promiscuous state from this file.
373 + */
374 +
375 +void save_promisc_list(struct promisc_states *list)
376 +{
377 + int fd;
378 + struct promisc_states *ptmp = list;
379 +
380 + fd = open(PROMISCLISTFILE, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
381 +
382 + if (fd < 0) {
383 + write_error("Unable to save interface flags", daemonized);
384 + return;
385 + }
386 +
387 + while (ptmp != NULL) {
388 + write(fd, &(ptmp->params), sizeof(struct promisc_params));
389 + ptmp = ptmp->next_entry;
390 + }
391 +
392 + close(fd);
393 +}
394 +
395 +/*
396 + * Load promiscuous states into list
397 + */
398 +
399 +void load_promisc_list(struct promisc_states **list)
400 +{
401 + int fd;
402 + struct promisc_states *ptmp = NULL;
403 + struct promisc_states *tail = NULL;
404 + int br;
405 +
406 + fd = open(PROMISCLISTFILE, O_RDONLY);
407 +
408 + if (fd < 0) {
409 + write_error("Unable to retrieve saved interface flags",
410 + daemonized);
411 + *list = NULL;
412 + return;
413 + }
414 +
415 + do {
416 + ptmp = malloc(sizeof(struct promisc_states));
417 + br = read(fd, &(ptmp->params), sizeof(struct promisc_params));
418 +
419 + if (br > 0) {
420 + if (tail != NULL)
421 + tail->next_entry = ptmp;
422 + else
423 + *list = ptmp;
424 +
425 + ptmp->next_entry = NULL;
426 + tail = ptmp;
427 + } else
428 + free(ptmp);
429 + } while (br > 0);
430 +
431 + close(fd);
432 +}
433 +
434 +/*
435 + * Set/restore interface promiscuous mode.
436 + */
437 +
438 +void srpromisc(int mode, struct promisc_states *list)
439 +{
440 + int fd;
441 + struct ifreq ifr;
442 + struct promisc_states *ptmp;
443 + int istat;
444 + char fullmsg[PROMISC_MSG_MAX];
445 +
446 + ptmp = list;
447 +
448 + fd = socket(PF_INET, SOCK_DGRAM, 0);
449 +
450 + if (fd < 0) {
451 + write_error("Unable to open socket for flag change", daemonized);
452 + return;
453 + }
454 +
455 + while (ptmp != NULL) {
456 + if (((strncmp(ptmp->params.ifname, "eth", 3) == 0) ||
457 + (strncmp(ptmp->params.ifname, "vlan", 4) == 0) ||
458 + (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
459 + (strncmp(ptmp->params.ifname, "lec", 3) == 0)) &&
460 + (ptmp->params.state_valid)) {
461 +
462 + strcpy(ifr.ifr_name, ptmp->params.ifname);
463 +
464 + if (mode)
465 + ifr.ifr_flags = ptmp->params.saved_state | IFF_PROMISC;
466 + else
467 + ifr.ifr_flags = ptmp->params.saved_state;
468 +
469 + istat = ioctl(fd, SIOCSIFFLAGS, &ifr);
470 +
471 + if (istat < 0) {
472 + sprintf(fullmsg, "Promisc change failed for %s",
473 + ptmp->params.ifname);
474 + write_error(fullmsg, daemonized);
475 + }
476 + }
477 + ptmp = ptmp->next_entry;
478 + }
479 +
480 + close(fd);
481 +}
482 +
483 +void destroy_promisc_list(struct promisc_states **list)
484 +{
485 + struct promisc_states *ptmp = *list;
486 + struct promisc_states *ctmp;
487 +
488 + if (ptmp != NULL)
489 + ctmp = ptmp->next_entry;
490 +
491 + while (ptmp != NULL) {
492 + free(ptmp);
493 + ptmp = ctmp;
494 + if (ctmp != NULL)
495 + ctmp = ctmp->next_entry;
496 + }
497 +}
498 diff -ruN iptraf-2.7.0-old/src/rvnamed.c iptraf-2.7.0-new/src/rvnamed.c
499 --- iptraf-2.7.0-old/src/rvnamed.c 2002-05-02 03:37:34.000000000 +0200
500 +++ iptraf-2.7.0-new/src/rvnamed.c 2005-10-04 22:02:47.000000000 +0200
501 @@ -48,7 +48,6 @@
502 #include <signal.h>
503 #include <sys/wait.h>
504 #include "rvnamed.h"
505 -#include "dirs.h"
506
507 #define NUM_CACHE_ENTRIES 2048
508 #define TIME_TARGET_MAX 30
509 diff -ruN iptraf-2.7.0-old/src/rvnamed.h iptraf-2.7.0-new/src/rvnamed.h
510 --- iptraf-2.7.0-old/src/rvnamed.h 2002-05-02 03:36:30.000000000 +0200
511 +++ iptraf-2.7.0-new/src/rvnamed.h 2005-10-04 22:03:29.000000000 +0200
512 @@ -1,9 +1,10 @@
513 #include <netinet/in.h>
514 #include <arpa/inet.h>
515 +#include "dirs.h"
516
517 -#define CHILDSOCKNAME "/dev/rvndcldcomsk"
518 -#define PARENTSOCKNAME "/dev/rvndpntcomsk"
519 -#define IPTSOCKNAME "/dev/rvndiptcomsk"
520 +#define CHILDSOCKNAME LOCKDIR "/rvndcldcomsk"
521 +#define PARENTSOCKNAME LOCKDIR "/rvndpntcomsk"
522 +#define IPTSOCKNAME LOCKDIR "/rvndiptcomsk"
523
524 #define SOCKET_PREFIX "isock"
525
526 diff -ruN iptraf-2.7.0-old/src/tcptable.c iptraf-2.7.0-new/src/tcptable.c
527 --- iptraf-2.7.0-old/src/tcptable.c 2002-05-08 03:36:27.000000000 +0200
528 +++ iptraf-2.7.0-new/src/tcptable.c 2005-10-03 19:25:55.000000000 +0200
529 @@ -598,9 +598,6 @@
530 if ((linkproto == LINK_ETHERNET) || (linkproto == LINK_PLIP)) {
531 convmacaddr(((struct ethhdr *) packet)->h_source,
532 newmacaddr);
533 - } else if (linkproto == LINK_FDDI) {
534 - convmacaddr(((struct fddihdr *) packet)->saddr,
535 - newmacaddr);
536 } else if (linkproto == LINK_TR) {
537 convmacaddr(((struct trh_hdr *) packet)->saddr, newmacaddr);
538 }
539 diff -ruN iptraf-2.7.0-old/src/tcptable.h iptraf-2.7.0-new/src/tcptable.h
540 --- iptraf-2.7.0-old/src/tcptable.h 2001-12-28 03:16:39.000000000 +0100
541 +++ iptraf-2.7.0-new/src/tcptable.h 2005-10-03 19:26:01.000000000 +0200
542 @@ -22,7 +22,6 @@
543 #include <asm/types.h>
544 #include <linux/if_packet.h>
545 #include <linux/if_ether.h>
546 -#include <linux/if_fddi.h>
547 #include <linux/if_tr.h>
548 #include <net/if.h>
549 #include <netinet/ip.h>