Mercurial > flash_v2
annotate packages/net/tcpip/current/src/lib/network_support.c @ 103:95f3e12a6327 ecos-sw-2000-06-23
Merge from eCos master repository on 2000-06-23-16:41:10-BST
| author | jlarmour |
|---|---|
| date | Fri, 23 Jun 2000 17:06:31 +0000 |
| parents | ced4577552cd |
| children | 84e4bde58b26 |
| rev | line source |
|---|---|
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
3 // lib/net_support.c |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
5 // Misc network support functions |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
8 //####COPYRIGHTBEGIN#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
9 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
10 // ------------------------------------------- |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
11 // The contents of this file are subject to the Red Hat eCos Public License |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
12 // Version 1.1 (the "License"); you may not use this file except in |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
13 // compliance with the License. You may obtain a copy of the License at |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
14 // http://www.redhat.com/ |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
15 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
18 // License for the specific language governing rights and limitations under |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
19 // the License. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
20 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
21 // The Original Code is eCos - Embedded Configurable Operating System, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
22 // released September 30, 1998. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
23 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
24 // The Initial Developer of the Original Code is Red Hat. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
25 // Portions created by Red Hat are |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
27 // All Rights Reserved. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
28 // ------------------------------------------- |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
29 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
30 //####COPYRIGHTEND#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
31 //####BSDCOPYRIGHTBEGIN#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
32 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
33 // ------------------------------------------- |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
34 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
35 // Portions of this software may have been derived from OpenBSD or other sources, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
36 // and are covered by the appropriate copyright disclaimers included herein. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
37 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
38 // ------------------------------------------- |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
39 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
40 //####BSDCOPYRIGHTEND#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
41 //========================================================================== |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
42 //#####DESCRIPTIONBEGIN#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
43 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
44 // Author(s): gthomas |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
45 // Contributors: gthomas, sorin@netappi.com ("Sorin Babeanu"), hmt |
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
46 // Date: 2000-01-10 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
47 // Purpose: |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
48 // Description: |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
49 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
50 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
51 //####DESCRIPTIONEND#### |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
52 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
53 //========================================================================== |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
54 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
55 // BOOTP support |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
56 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
57 #include <pkgconf/net.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
58 #undef _KERNEL |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
59 #include <sys/param.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
60 #include <sys/socket.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
61 #include <sys/ioctl.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
62 #include <sys/errno.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
63 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
64 #include <net/if.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
65 #include <netinet/in.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
66 #include <netinet/ip.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
67 #include <netinet/ip_icmp.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
68 #include <net/route.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
69 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
70 #include <cyg/infra/diag.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
71 #include <cyg/kernel/kapi.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
72 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
73 #include <stdio.h> // for 'sprintf()' |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
74 |
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
75 #include <bootp.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
76 #include <network.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
77 #include <arpa/inet.h> |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
78 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
79 #ifdef CYGHWR_NET_DRIVER_ETH0 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
80 struct bootp eth0_bootp_data; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
81 cyg_bool_t eth0_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
82 const char *eth0_name = "eth0"; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
83 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
84 #ifdef CYGHWR_NET_DRIVER_ETH1 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
85 struct bootp eth1_bootp_data; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
86 cyg_bool_t eth1_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
87 const char *eth1_name = "eth1"; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
88 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
89 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
90 #define _string(s) #s |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
91 #define string(s) _string(s) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
92 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
93 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
94 #ifdef CYGPKG_NET_NLOOP |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
95 #if 0 < CYGPKG_NET_NLOOP |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
96 // |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
97 // Initialize loopback interface ---------- Added by sorin@netappi.com |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
98 // |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
99 cyg_bool_t init_loopback_interface(int lo) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
100 { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
101 struct sockaddr_in *addrp; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
102 struct ifreq ifr; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
103 int s; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
104 int one = 1; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
105 struct ecos_rtentry route; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
106 struct in_addr netmask, gateway; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
107 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
108 //diag_printf("Init_loopback_interface\n"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
109 s = socket(AF_INET, SOCK_DGRAM, 0); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
110 if (s < 0) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
111 perror("socket"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
112 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
113 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
114 if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one))) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
115 perror("setsockopt"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
116 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
117 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
118 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
119 addrp = (struct sockaddr_in *) &ifr.ifr_addr; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
120 memset(addrp, 0, sizeof(*addrp)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
121 addrp->sin_family = AF_INET; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
122 addrp->sin_len = sizeof(*addrp); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
123 addrp->sin_port = 0; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
124 // Make an address 127.0.<lo>.1 to manage multiple loopback ifs. |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
125 // (There is normally only 1, so it's the standard 127.0.0.1) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
126 addrp->sin_addr.s_addr = htonl((0x100 * lo) + INADDR_LOOPBACK) ; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
127 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
128 // Init the one we were told to |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
129 sprintf(ifr.ifr_name, "lo%d", lo); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
130 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
131 if (ioctl(s, SIOCSIFADDR, &ifr)) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
132 perror("SIOCIFADDR"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
133 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
134 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
135 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
136 #if 1 < CYGPKG_NET_NLOOP |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
137 // We cheat to make different nets for multiple loopback devs |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
138 addrp->sin_addr.s_addr = netmask.s_addr = htonl(IN_CLASSC_NET); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
139 #else |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
140 // |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
141 addrp->sin_addr.s_addr = netmask.s_addr = htonl(IN_CLASSA_NET); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
142 #endif |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
143 if (ioctl(s, SIOCSIFNETMASK, &ifr)) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
144 perror("SIOCSIFNETMASK"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
145 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
146 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
147 ifr.ifr_flags = IFF_UP | IFF_BROADCAST | IFF_RUNNING; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
148 if (ioctl(s, SIOCSIFFLAGS, &ifr)) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
149 perror("SIOCSIFFLAGS"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
150 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
151 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
152 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
153 gateway.s_addr = htonl(INADDR_LOOPBACK); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
154 memset(&route, 0, sizeof(route)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
155 addrp->sin_family = AF_INET; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
156 addrp->sin_port = 0; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
157 addrp->sin_addr.s_addr = htonl((0x100 * lo) + INADDR_LOOPBACK) & netmask.s_addr; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
158 memcpy(&route.rt_dst, addrp, sizeof(*addrp)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
159 addrp->sin_addr = netmask; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
160 memcpy(&route.rt_genmask, addrp, sizeof(*addrp)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
161 addrp->sin_addr = gateway; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
162 memcpy(&route.rt_gateway, addrp, sizeof(*addrp)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
163 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
164 route.rt_dev = ifr.ifr_name; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
165 route.rt_flags = RTF_UP|RTF_GATEWAY; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
166 route.rt_metric = 0; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
167 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
168 if (ioctl(s, SIOCADDRT, &route)) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
169 diag_printf("Route - dst: %s", inet_ntoa(((struct sockaddr_in *)&route.rt_dst)->sin_addr)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
170 diag_printf(", mask: %s", inet_ntoa(((struct sockaddr_in *)&route.rt_genmask)->sin_addr)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
171 diag_printf(", gateway: %s\n", inet_ntoa(((struct sockaddr_in *)&route.rt_gateway)->sin_addr)); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
172 if (errno != EEXIST) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
173 perror("SIOCADDRT 3"); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
174 return false; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
175 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
176 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
177 close(s); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
178 return true; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
179 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
180 #endif |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
181 #endif |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
182 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
183 |
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
184 #if defined(CYGHWR_NET_DRIVER_ETH0_ADDRS_IP) \ |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
185 || defined(CYGHWR_NET_DRIVER_ETH1_ADDRS_IP) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
186 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
187 // Internal function which builds up a fake BOOTP database for |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
188 // an interface. |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
189 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
190 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
191 static unsigned char * |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
192 add_tag(unsigned char *vp, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
193 unsigned char tag, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
194 void *val, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
195 int len) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
196 { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
197 int i; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
198 unsigned char *xp = (unsigned char *)val; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
199 *vp++ = tag; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
200 *vp++ = len; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
201 for (i = 0; i < len; i++) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
202 *vp++ = *xp++; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
203 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
204 return vp; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
205 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
206 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
207 static void |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
208 build_bootp_record(struct bootp *bp, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
209 const char *addrs_ip, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
210 const char *addrs_netmask, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
211 const char *addrs_broadcast, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
212 const char *addrs_gateway, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
213 const char *addrs_server) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
214 { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
215 int i; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
216 in_addr_t addr; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
217 unsigned char *vp; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
218 unsigned char cookie[] = VM_RFC1048; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
219 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
220 bzero(bp, sizeof(struct bootp)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
221 bp->bp_op = BOOTREPLY; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
222 bp->bp_htype = HTYPE_ETHERNET; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
223 bp->bp_hlen = 6; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
224 for (i = 0; i < bp->bp_hlen; i++) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
225 bp->bp_chaddr[i] = 0xFF; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
226 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
227 bp->bp_ciaddr.s_addr = inet_addr(addrs_ip); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
228 bp->bp_yiaddr.s_addr = inet_addr(addrs_ip); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
229 bp->bp_siaddr.s_addr = inet_addr(addrs_server); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
230 bp->bp_giaddr.s_addr = inet_addr(addrs_gateway); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
231 vp = &bp->bp_vend[0]; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
232 bcopy(&cookie, vp, sizeof(cookie)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
233 vp += sizeof(cookie); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
234 addr = inet_addr(addrs_netmask); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
235 vp = add_tag(vp, TAG_SUBNET_MASK, &addr, sizeof(in_addr_t)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
236 addr = inet_addr(addrs_broadcast); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
237 vp = add_tag(vp, TAG_IP_BROADCAST, &addr, sizeof(in_addr_t)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
238 *vp = TAG_END; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
239 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
240 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
241 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
242 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
243 // Initialize network interface[s] using BOOTP/DHCP |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
244 // |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
245 void |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
246 init_all_network_interfaces(void) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
247 { |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
248 static volatile int in_init_all_network_interfaces = 0; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
249 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
250 cyg_scheduler_lock(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
251 while ( in_init_all_network_interfaces ) { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
252 // Another thread is doing this... |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
253 cyg_scheduler_unlock(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
254 cyg_thread_delay( 10 ); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
255 cyg_scheduler_lock(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
256 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
257 in_init_all_network_interfaces = 1; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
258 cyg_scheduler_unlock(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
259 |
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
260 #ifdef CYGHWR_NET_DRIVER_ETH0 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
261 if ( ! eth0_up ) { // Make this call idempotent |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
262 #ifdef CYGHWR_NET_DRIVER_ETH0_BOOTP |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
263 // Perform a complete initialization, using BOOTP/DHCP |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
264 eth0_up = true; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
265 if (do_bootp(eth0_name, ð0_bootp_data)) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
266 #ifdef CYGHWR_NET_DRIVER_ETH0_BOOTP_SHOW |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
267 show_bootp(eth0_name, ð0_bootp_data); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
268 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
269 } else { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
270 diag_printf("BOOTP failed on eth0\n"); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
271 eth0_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
272 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
273 #elif defined(CYGHWR_NET_DRIVER_ETH0_ADDRS_IP) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
274 eth0_up = true; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
275 build_bootp_record(ð0_bootp_data, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
276 string(CYGHWR_NET_DRIVER_ETH0_ADDRS_IP), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
277 string(CYGHWR_NET_DRIVER_ETH0_ADDRS_NETMASK), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
278 string(CYGHWR_NET_DRIVER_ETH0_ADDRS_BROADCAST), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
279 string(CYGHWR_NET_DRIVER_ETH0_ADDRS_GATEWAY), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
280 string(CYGHWR_NET_DRIVER_ETH0_ADDRS_SERVER)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
281 show_bootp(eth0_name, ð0_bootp_data); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
282 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
283 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
284 #endif // CYGHWR_NET_DRIVER_ETH0 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
285 #ifdef CYGHWR_NET_DRIVER_ETH1 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
286 if ( ! eth1_up ) { // Make this call idempotent |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
287 #ifdef CYGHWR_NET_DRIVER_ETH1_BOOTP |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
288 // Perform a complete initialization, using BOOTP/DHCP |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
289 eth1_up = true; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
290 if (do_bootp(eth1_name, ð1_bootp_data)) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
291 #ifdef CYGHWR_NET_DRIVER_ETH1_BOOTP_SHOW |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
292 show_bootp(eth1_name, ð1_bootp_data); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
293 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
294 } else { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
295 diag_printf("BOOTP failed on eth1\n"); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
296 eth1_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
297 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
298 #elif defined(CYGHWR_NET_DRIVER_ETH1_ADDRS_IP) |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
299 eth1_up = true; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
300 build_bootp_record(ð1_bootp_data, |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
301 string(CYGHWR_NET_DRIVER_ETH1_ADDRS_IP), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
302 string(CYGHWR_NET_DRIVER_ETH1_ADDRS_NETMASK), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
303 string(CYGHWR_NET_DRIVER_ETH1_ADDRS_BROADCAST), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
304 string(CYGHWR_NET_DRIVER_ETH1_ADDRS_GATEWAY), |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
305 string(CYGHWR_NET_DRIVER_ETH1_ADDRS_SERVER)); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
306 show_bootp(eth1_name, ð1_bootp_data); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
307 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
308 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
309 #endif // CYGHWR_NET_DRIVER_ETH1 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
310 #ifdef CYGHWR_NET_DRIVER_ETH0 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
311 #ifndef CYGHWR_NET_DRIVER_ETH0_MANUAL |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
312 if (eth0_up) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
313 if (!init_net(eth0_name, ð0_bootp_data)) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
314 diag_printf("Network initialization failed for eth0\n"); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
315 eth0_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
316 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
317 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
318 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
319 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
320 #ifdef CYGHWR_NET_DRIVER_ETH1 |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
321 #ifndef CYGHWR_NET_DRIVER_ETH1_MANUAL |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
322 if (eth1_up) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
323 if (!init_net(eth1_name, ð1_bootp_data)) { |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
324 diag_printf("Network initialization failed for eth1\n"); |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
325 eth1_up = false; |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
326 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
327 } |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
328 #endif |
|
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
329 #endif |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
330 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
331 #ifdef CYGPKG_NET_NLOOP |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
332 #if 0 < CYGPKG_NET_NLOOP |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
333 { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
334 static int loop_init = 0; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
335 int i; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
336 if ( 0 == loop_init++ ) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
337 for ( i = 0; i < CYGPKG_NET_NLOOP; i++ ) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
338 init_loopback_interface( i ); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
339 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
340 #endif |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
341 #endif |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
342 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
343 // Open the monitor to other threads. |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
97
diff
changeset
|
344 in_init_all_network_interfaces = 0; |
|
97
ced4577552cd
Merge from eCos master repository on 2000-06-06-08:44:00-BST
jlarmour
parents:
diff
changeset
|
345 } |
