Changes in uspace/srv/net/ethip/ethip.c [417a2ba1:289cb7dd] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/ethip/ethip.c
r417a2ba1 r289cb7dd 44 44 #include <stdio.h> 45 45 #include <stdlib.h> 46 46 47 #include "arp.h" 47 48 #include "ethip.h" … … 54 55 static int ethip_open(iplink_srv_t *srv); 55 56 static int ethip_close(iplink_srv_t *srv); 56 static int ethip_send(iplink_srv_t *srv, iplink_sdu_t *sdu); 57 static int ethip_send6(iplink_srv_t *srv, iplink_sdu6_t *sdu); 57 static int ethip_send(iplink_srv_t *srv, iplink_srv_sdu_t *sdu); 58 58 static int ethip_get_mtu(iplink_srv_t *srv, size_t *mtu); 59 static int ethip_get_mac48(iplink_srv_t *srv, addr48_t *mac); 60 static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr); 61 static int ethip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr); 59 static int ethip_addr_add(iplink_srv_t *srv, iplink_srv_addr_t *addr); 60 static int ethip_addr_remove(iplink_srv_t *srv, iplink_srv_addr_t *addr); 62 61 63 62 static void ethip_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg); … … 67 66 .close = ethip_close, 68 67 .send = ethip_send, 69 .send6 = ethip_send6,70 68 .get_mtu = ethip_get_mtu, 71 .get_mac48 = ethip_get_mac48,72 69 .addr_add = ethip_addr_add, 73 70 .addr_remove = ethip_addr_remove … … 167 164 } 168 165 169 static int ethip_send(iplink_srv_t *srv, iplink_sdu_t *sdu) 170 { 166 static int ethip_send(iplink_srv_t *srv, iplink_srv_sdu_t *sdu) 167 { 168 ethip_nic_t *nic = (ethip_nic_t *)srv->arg; 169 eth_frame_t frame; 170 void *data; 171 size_t size; 172 mac48_addr_t dest_mac_addr; 173 int rc; 174 171 175 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_send()"); 172 173 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 174 eth_frame_t frame; 175 176 int rc = arp_translate(nic, sdu->src, sdu->dest, frame.dest); 177 if (rc != EOK) { 178 log_msg(LOG_DEFAULT, LVL_WARN, "Failed to look up IPv4 address 0x%" 179 PRIx32, sdu->dest); 180 return rc; 181 } 182 183 addr48(nic->mac_addr, frame.src); 176 177 rc = arp_translate(nic, &sdu->lsrc, &sdu->ldest, &dest_mac_addr); 178 if (rc != EOK) { 179 log_msg(LOG_DEFAULT, LVL_WARN, "Failed to look up IP address 0x%" PRIx32, 180 sdu->ldest.ipv4); 181 return rc; 182 } 183 184 frame.dest = dest_mac_addr; 185 frame.src = nic->mac_addr; 184 186 frame.etype_len = ETYPE_IP; 185 187 frame.data = sdu->data; 186 188 frame.size = sdu->size; 187 188 void *data; 189 size_t size; 189 190 190 rc = eth_pdu_encode(&frame, &data, &size); 191 191 if (rc != EOK) 192 192 return rc; 193 193 194 194 rc = ethip_nic_send(nic, data, size); 195 195 free(data); 196 196 197 197 return rc; 198 198 } 199 199 200 static int ethip_send6(iplink_srv_t *srv, iplink_sdu6_t *sdu) 201 { 202 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_send6()"); 203 204 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 200 int ethip_received(iplink_srv_t *srv, void *data, size_t size) 201 { 202 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_received(): srv=%p", srv); 203 ethip_nic_t *nic = (ethip_nic_t *)srv->arg; 205 204 eth_frame_t frame; 206 207 addr48(sdu->dest, frame.dest); 208 addr48(nic->mac_addr, frame.src); 209 frame.etype_len = ETYPE_IPV6; 210 frame.data = sdu->data; 211 frame.size = sdu->size; 212 213 void *data; 214 size_t size; 215 int rc = eth_pdu_encode(&frame, &data, &size); 216 if (rc != EOK) 217 return rc; 218 219 rc = ethip_nic_send(nic, data, size); 220 free(data); 221 222 return rc; 223 } 224 225 int ethip_received(iplink_srv_t *srv, void *data, size_t size) 226 { 227 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_received(): srv=%p", srv); 228 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 229 205 iplink_srv_sdu_t sdu; 206 int rc; 207 208 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_received()"); 209 230 210 log_msg(LOG_DEFAULT, LVL_DEBUG, " - eth_pdu_decode"); 231 232 eth_frame_t frame; 233 int rc = eth_pdu_decode(data, size, &frame); 211 rc = eth_pdu_decode(data, size, &frame); 234 212 if (rc != EOK) { 235 213 log_msg(LOG_DEFAULT, LVL_DEBUG, " - eth_pdu_decode failed"); 236 214 return rc; 237 215 } 238 239 iplink_recv_sdu_t sdu; 240 216 241 217 switch (frame.etype_len) { 242 218 case ETYPE_ARP: … … 245 221 case ETYPE_IP: 246 222 log_msg(LOG_DEFAULT, LVL_DEBUG, " - construct SDU"); 223 sdu.lsrc.ipv4 = 0; 224 sdu.ldest.ipv4 = 0; 247 225 sdu.data = frame.data; 248 226 sdu.size = frame.size; 249 227 log_msg(LOG_DEFAULT, LVL_DEBUG, " - call iplink_ev_recv"); 250 rc = iplink_ev_recv(&nic->iplink, &sdu, ip_v4); 251 break; 252 case ETYPE_IPV6: 253 log_msg(LOG_DEFAULT, LVL_DEBUG, " - construct SDU IPv6"); 254 sdu.data = frame.data; 255 sdu.size = frame.size; 256 log_msg(LOG_DEFAULT, LVL_DEBUG, " - call iplink_ev_recv"); 257 rc = iplink_ev_recv(&nic->iplink, &sdu, ip_v6); 228 rc = iplink_ev_recv(&nic->iplink, &sdu); 258 229 break; 259 230 default: … … 261 232 frame.etype_len); 262 233 } 263 234 264 235 free(frame.data); 265 236 return rc; … … 273 244 } 274 245 275 static int ethip_get_mac48(iplink_srv_t *srv, addr48_t *mac) 276 { 277 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_get_mac48()"); 278 279 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 280 addr48(nic->mac_addr, *mac); 281 282 return EOK; 283 } 284 285 static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr) 286 { 287 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 288 246 static int ethip_addr_add(iplink_srv_t *srv, iplink_srv_addr_t *addr) 247 { 248 ethip_nic_t *nic = (ethip_nic_t *)srv->arg; 249 250 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_addr_add(0x%" PRIx32 ")", addr->ipv4); 289 251 return ethip_nic_addr_add(nic, addr); 290 252 } 291 253 292 static int ethip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr) 293 { 294 ethip_nic_t *nic = (ethip_nic_t *) srv->arg; 295 296 return ethip_nic_addr_remove(nic, addr); 254 static int ethip_addr_remove(iplink_srv_t *srv, iplink_srv_addr_t *addr) 255 { 256 ethip_nic_t *nic = (ethip_nic_t *)srv->arg; 257 258 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_addr_remove(0x%" PRIx32 ")", addr->ipv4); 259 return ethip_nic_addr_add(nic, addr); 297 260 } 298 261
Note:
See TracChangeset
for help on using the changeset viewer.