blob: 011137404f6cc7b42ed9f590d5012cadcdb7a5cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/* Network interface register help function
*
* COPYRIGHT (c) 2008.
* Cobham Gaisler AB.
*
* This function adds a network interface to the
* rtems_bsdnet_config.ifconfig linked list of interfaces.
* The interface configuration is taken from the user defined
* array interface_configs. This function is useful for PnP
* systems when an unknown number of interfaces are available.
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <rtems/rtems_bsdnet.h>
#include <stdio.h>
#include <grlib/network_interface_add.h>
extern struct rtems_bsdnet_config rtems_bsdnet_config;
/* Number of interfaces taken */
int network_interface_cnt = 0;
int network_interface_add(struct rtems_bsdnet_ifconfig *interface)
{
struct ethernet_config *cfg = NULL;
int i, last_entry = 1;
/* Init interface description */
interface->next = NULL;
cfg = &interface_configs[network_interface_cnt];
for(i=0; i<6; i++) {
if ( cfg->eth_adr[i] != 0 ) {
last_entry = 0;
break;
}
}
/* Do we have a valid configuration? */
if ( last_entry == 0 ) {
cfg = &interface_configs[network_interface_cnt];
interface->ip_address = cfg->ip_addr;
interface->ip_netmask = cfg->ip_netmask;
interface->hardware_address = cfg->eth_adr;
network_interface_cnt++;
} else {
interface->ip_address = NULL;
interface->ip_netmask = NULL;
interface->hardware_address = NULL;
}
/* Insert interface first into list */
interface->next = rtems_bsdnet_config.ifconfig;
rtems_bsdnet_config.ifconfig = interface;
return 0;
}
|