Rev 4307 | Rev 4351 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4307 | Rev 4350 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | /** @addtogroup lo |
29 | /** @addtogroup lo |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | 32 | ||
33 | /** @file |
33 | /** @file |
- | 34 | * Loopback network interface implementation. |
|
34 | */ |
35 | */ |
35 | 36 | ||
36 | #include <async.h> |
37 | #include <async.h> |
37 | #include <errno.h> |
38 | #include <errno.h> |
38 | #include <stdio.h> |
39 | #include <stdio.h> |
Line 52... | Line 53... | ||
52 | #include "../../include/net_interface.h" |
53 | #include "../../include/net_interface.h" |
53 | 54 | ||
54 | #include "../netif.h" |
55 | #include "../netif.h" |
55 | #include "../netif_module.h" |
56 | #include "../netif_module.h" |
56 | 57 | ||
- | 58 | /** Default maximum transmission unit. |
|
- | 59 | */ |
|
57 | #define DEFAULT_MTU 1500 |
60 | #define DEFAULT_MTU 1500 |
58 | 61 | ||
- | 62 | /** Default hardware address. |
|
- | 63 | */ |
|
59 | #define DEFAULT_ADDR "\0\0\0\0\0\0" |
64 | #define DEFAULT_ADDR "\0\0\0\0\0\0" |
- | 65 | ||
- | 66 | /** Default address length. |
|
- | 67 | */ |
|
60 | #define DEFAULT_ADDR_LEN ( sizeof( DEFAULT_ADDR ) / sizeof( char )) |
68 | #define DEFAULT_ADDR_LEN ( sizeof( DEFAULT_ADDR ) / sizeof( char )) |
61 | 69 | ||
- | 70 | /** Loopback module name. |
|
- | 71 | */ |
|
62 | #define NAME "lo - loopback interface" |
72 | #define NAME "lo - loopback interface" |
63 | 73 | ||
- | 74 | /** Network interface global data. |
|
- | 75 | */ |
|
64 | netif_globals_t netif_globals; |
76 | netif_globals_t netif_globals; |
65 | 77 | ||
- | 78 | /** Loopback module global data. |
|
- | 79 | */ |
|
66 | static struct lo_globals{ |
80 | static struct lo_globals{ |
67 | unsigned int mtu; |
81 | unsigned int mtu; |
68 | } lo_globals; |
82 | } lo_globals; |
69 | 83 | ||
- | 84 | /** Changes the loopback state. |
|
- | 85 | * @param device The device structure. Input parameter. |
|
- | 86 | * @param state The new device state. Input parameter. |
|
- | 87 | * @returns The new state if changed. |
|
- | 88 | * @returns EOK otherwise. |
|
- | 89 | */ |
|
70 | static int change_state_message( device_ref device, device_state_t state ); |
90 | int change_state_message( device_ref device, device_state_t state ); |
- | 91 | ||
- | 92 | /** Creates and returns the loopback network interface structure. |
|
- | 93 | * @param device_id The new devce identifier. Input parameter. |
|
- | 94 | * @param device The device structure. Output parameter. |
|
- | 95 | * @returns EOK on success. |
|
- | 96 | * @returns EXDEV if one loopback network interface already exists. |
|
- | 97 | * @returns ENOMEM if there is not enough memory left. |
|
- | 98 | */ |
|
71 | static int create( device_id_t device_id, device_ref * device ); |
99 | int create( device_id_t device_id, device_ref * device ); |
- | 100 | ||
- | 101 | /** Prints the module name. |
|
- | 102 | * @see NAME |
|
- | 103 | */ |
|
72 | void module_print_name( void ); |
104 | void module_print_name( void ); |
73 | 105 | ||
74 | int netif_specific_message( ipc_callid_t callid, ipc_call_t * call, ipc_call_t * answer, int * answer_count ){ |
106 | int netif_specific_message( ipc_callid_t callid, ipc_call_t * call, ipc_call_t * answer, int * answer_count ){ |
75 | //TODO nil send message |
107 | //TODO nil send message |
76 | return ENOTSUP; |
108 | return ENOTSUP; |
Line 92... | Line 124... | ||
92 | ERROR_PROPAGATE( find_device( device_id, & device )); |
124 | ERROR_PROPAGATE( find_device( device_id, & device )); |
93 | memcpy( stats, ( device_stats_ref ) device->specific, sizeof( device_stats_t )); |
125 | memcpy( stats, ( device_stats_ref ) device->specific, sizeof( device_stats_t )); |
94 | return EOK; |
126 | return EOK; |
95 | } |
127 | } |
96 | 128 | ||
97 | static int change_state_message( device_ref device, device_state_t state ){ |
129 | int change_state_message( device_ref device, device_state_t state ){ |
98 | if( device->state != state ){ |
130 | if( device->state != state ){ |
99 | device->state = state; |
131 | device->state = state; |
100 | printf( "State changed to %s\n", ( state == NETIF_ACTIVE ) ? "ACTIVE" : "STOPPED" ); |
132 | printf( "State changed to %s\n", ( state == NETIF_ACTIVE ) ? "ACTIVE" : "STOPPED" ); |
101 | return state; |
133 | return state; |
102 | } |
134 | } |
103 | return EOK; |
135 | return EOK; |
104 | } |
136 | } |
105 | 137 | ||
106 | static int create( device_id_t device_id, device_ref * device ){ |
138 | int create( device_id_t device_id, device_ref * device ){ |
107 | int index; |
139 | int index; |
108 | 140 | ||
109 | if( device_map_count( & netif_globals.device_map ) > 0 ){ |
141 | if( device_map_count( & netif_globals.device_map ) > 0 ){ |
110 | return EXDEV; |
142 | return EXDEV; |
111 | }else{ |
143 | }else{ |