SMB - attribute offset fixed, filetimes all fully working
[libogc.git] / libdb / uIP / uip_netif.c
blob5c7e1b77ff947162ca74eeaf79271a4fe6469af9
1 #include <stdlib.h>
2 #include <string.h>
4 #include "uip_ip.h"
5 #include "uip_tcp.h"
6 #include "uip_pbuf.h"
7 #include "uip_netif.h"
9 #if UIP_LOGGING == 1
10 #include <stdio.h>
11 #define UIP_LOG(m) uip_log(__FILE__,__LINE__,m)
12 #else
13 #define UIP_LOG(m)
14 #endif /* UIP_LOGGING == 1 */
16 #if UIP_ERRORING == 1
17 #include <stdio.h>
18 #define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m)
19 #else
20 #define UIP_ERROR(m)
21 #endif /* UIP_ERRORING == 1 */
23 #if UIP_STATISTICS == 1
24 struct uip_stats uip_stat;
25 #define UIP_STAT(s) s
26 #else
27 #define UIP_STAT(s)
28 #endif /* UIP_STATISTICS == 1 */
31 struct uip_netif *uip_netif_list;
32 struct uip_netif *uip_netif_default;
34 void uip_netif_init()
36 uip_netif_list = uip_netif_default = NULL;
39 void uip_netif_setup(struct uip_netif *netif)
41 netif->flags |= UIP_NETIF_FLAG_UP;
44 u8_t uip_netif_isup(struct uip_netif *netif)
46 return (netif->flags&UIP_NETIF_FLAG_UP);
49 struct uip_netif* uip_netif_add(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw,void *state,s8_t (*init)(struct uip_netif *netif),s8_t (*input)(struct uip_pbuf *p,struct uip_netif *netif))
51 static int netif_num = 0;
53 netif->state = state;
54 netif->num = netif_num++;
55 netif->input = input;
57 uip_netif_setaddr(netif,ipaddr,netmask,gw);
59 if(init(netif)!=0) return NULL;
61 UIP_LOG("uip_netif_add: netif is up.\n");
63 netif->next = uip_netif_list;
64 uip_netif_list = netif;
66 return netif;
69 void uip_netif_setaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw)
71 uip_netif_setipaddr(netif,ipaddr);
72 uip_netif_setnetmask(netif,netmask);
73 uip_netif_setgw(netif,gw);
76 void uip_netif_setipaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr)
78 #if UIP_TCP
79 struct uip_tcp_pcb *pcb;
80 struct uip_tcp_pcb_listen *lpcb;
82 if((ip_addr_cmp(ipaddr,&netif->ip_addr))==0) {
83 pcb = uip_tcp_active_pcbs;
84 while(pcb!=NULL) {
85 if(ip_addr_cmp(&pcb->local_ip,&netif->ip_addr)) {
86 struct uip_tcp_pcb *next = pcb->next;
87 pcb = next;
88 } else {
89 pcb = pcb->next;
92 for(lpcb=uip_tcp_listen_pcbs.listen_pcbs;lpcb!=NULL;lpcb=lpcb->next) {
93 if(ip_addr_cmp(&lpcb->local_ip,&netif->ip_addr)) {
94 ip_addr_set(&lpcb->local_ip,ipaddr);
98 #endif
99 ip_addr_set(&netif->ip_addr,ipaddr);
102 void uip_netif_setnetmask(struct uip_netif *netif,struct uip_ip_addr *netmask)
104 ip_addr_set(&netif->netmask,netmask);
107 void uip_netif_setgw(struct uip_netif *netif,struct uip_ip_addr *gw)
109 ip_addr_set(&netif->gw,gw);
112 void uip_netif_setdefault(struct uip_netif *netif)
114 uip_netif_default = netif;
117 struct uip_netif* uip_netif_find(const char *name)
119 u8_t num;
120 struct uip_netif *netif;
122 if(name==NULL) return NULL;
124 num = name[2] - '0';
126 for(netif=uip_netif_list;netif!=NULL;netif=netif->next) {
127 if(netif->num==num &&
128 netif->name[0]==name[0] &&
129 netif->name[1]==name[1]) return netif;
132 return NULL;