Changeset fe4310f in mainline
- Timestamp:
- 2012-02-12T22:40:15Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2ff150e
- Parents:
- bd8bfc5a
- Location:
- uspace
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/e1k/e1k.c
rbd8bfc5a rfe4310f 2309 2309 static void e1000_send_frame(nic_t *nic, void *data, size_t size) 2310 2310 { 2311 printf("e1000_send_frame()\n"); 2311 2312 assert(nic); 2312 2313 -
uspace/srv/ethip/ethip_nic.c
rbd8bfc5a rfe4310f 226 226 free(data); 227 227 228 log_msg(LVL_DEBUG, "ethip_nic_received() done, rc=%d", rc); 228 229 async_answer_0(callid, rc); 229 230 } … … 303 304 int ethip_nic_send(ethip_nic_t *nic, void *data, size_t size) 304 305 { 306 int rc; 305 307 log_msg(LVL_DEBUG, "ethip_nic_send(size=%zu)", size); 306 return nic_send_frame(nic->sess, data, size); 308 rc = nic_send_frame(nic->sess, data, size); 309 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 310 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 311 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 312 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 313 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 314 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 315 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 316 log_msg(LVL_DEBUG, "nic_send_frame -> %d", rc); 317 return rc; 307 318 } 308 319 -
uspace/srv/inet/inet.c
rbd8bfc5a rfe4310f 262 262 } 263 263 264 static inet_client_t *inet_client_find(uint8_t proto) 265 { 266 fibril_mutex_lock(&client_list_lock); 267 268 list_foreach(client_list, link) { 269 inet_client_t *client = list_get_instance(link, inet_client_t, 270 client_list); 271 272 if (client->protocol == proto) { 273 fibril_mutex_unlock(&client_list_lock); 274 return client; 275 } 276 } 277 278 fibril_mutex_unlock(&client_list_lock); 279 return NULL; 280 } 281 264 282 int inet_ev_recv(inet_client_t *client, inet_dgram_t *dgram) 265 283 { … … 285 303 } 286 304 287 int inet_recv_packet(inet_dgram_t *dgram, uint8_t ttl, int df) 288 { 289 return inet_route_packet(dgram, ttl, df); 305 static int inet_recv_dgram_local(inet_dgram_t *dgram, uint8_t proto) 306 { 307 inet_client_t *client; 308 309 log_msg(LVL_DEBUG, "inet_recv_dgram_local()"); 310 311 client = inet_client_find(proto); 312 if (client == NULL) { 313 log_msg(LVL_DEBUG, "No client found for protocol 0x%" PRIx8, 314 proto); 315 return ENOENT; 316 } 317 318 return inet_ev_recv(client, dgram); 319 } 320 321 int inet_recv_packet(inet_packet_t *packet) 322 { 323 inet_addrobj_t *addr; 324 inet_dgram_t dgram; 325 326 addr = inet_addrobj_find(&packet->dest, iaf_addr); 327 if (addr != NULL) { 328 /* Destined for one of the local addresses */ 329 330 /* XXX Reassemble packets */ 331 dgram.src = packet->src; 332 dgram.dest = packet->dest; 333 dgram.tos = packet->tos; 334 dgram.data = packet->data; 335 dgram.size = packet->size; 336 337 return inet_recv_dgram_local(&dgram, packet->proto); 338 } 339 340 return ENOENT; 290 341 } 291 342 -
uspace/srv/inet/inet.h
rbd8bfc5a rfe4310f 68 68 inet_addr_t dest; 69 69 uint8_t tos; 70 uint8_t proto; 71 uint8_t ttl; 72 int df; 73 void *data; 74 size_t size; 75 } inet_packet_t; 76 77 typedef struct { 78 inet_addr_t src; 79 inet_addr_t dest; 80 uint8_t tos; 70 81 void *data; 71 82 size_t size; … … 87 98 88 99 extern int inet_ev_recv(inet_client_t *, inet_dgram_t *); 89 extern int inet_recv_packet(inet_ dgram_t *, uint8_t ttl, int df);100 extern int inet_recv_packet(inet_packet_t *); 90 101 91 102 #endif -
uspace/srv/inet/inet_link.c
rbd8bfc5a rfe4310f 60 60 static int inet_iplink_recv(iplink_t *iplink, iplink_sdu_t *sdu) 61 61 { 62 inet_dgram_t dgram; 63 uint8_t ttl; 64 int df; 62 inet_packet_t packet; 65 63 int rc; 66 64 67 65 log_msg(LVL_DEBUG, "inet_iplink_recv()"); 68 rc = inet_pdu_decode(sdu->data, sdu->size, &dgram, &ttl, &df); 69 if (rc != EOK) 66 rc = inet_pdu_decode(sdu->data, sdu->size, &packet); 67 if (rc != EOK) { 68 log_msg(LVL_DEBUG, "failed decoding PDU"); 70 69 return rc; 71 72 return inet_recv_packet(&dgram, ttl, df); 70 } 71 72 log_msg(LVL_DEBUG, "call inet_recv_packet()"); 73 rc = inet_recv_packet(&packet); 74 log_msg(LVL_DEBUG, "call inet_recv_packet -> %d", rc); 75 76 return rc; 73 77 } 74 78 … … 216 220 { 217 221 iplink_sdu_t sdu; 218 int rc; 222 inet_packet_t packet; 223 int rc; 224 225 /* XXX Fragment packet */ 226 packet.src = dgram->src; 227 packet.dest = dgram->dest; 228 packet.tos = dgram->tos; 229 packet.proto = 42; 230 packet.ttl = ttl; 231 packet.df = df; 232 packet.data = dgram->data; 233 packet.size = dgram->size; 219 234 220 235 sdu.lsrc.ipv4 = lsrc->ipv4; 221 236 sdu.ldest.ipv4 = ldest->ipv4; 222 rc = inet_pdu_encode( dgram, ttl, df, &sdu.data, &sdu.size);237 rc = inet_pdu_encode(&packet, &sdu.data, &sdu.size); 223 238 if (rc != EOK) 224 239 return rc; -
uspace/srv/inet/pdu.c
rbd8bfc5a rfe4310f 48 48 49 49 /** Encode Internet PDU. 50 *51 * XXX We should be encoding from packet, not from datagram.52 50 */ 53 int inet_pdu_encode(inet_dgram_t *dgram, uint8_t ttl, int df, void **rdata, 54 size_t *rsize) 51 int inet_pdu_encode(inet_packet_t *packet, void **rdata, size_t *rsize) 55 52 { 56 53 void *data; … … 61 58 62 59 hdr_size = sizeof(ip_header_t); 63 size = hdr_size + dgram->size;60 size = hdr_size + packet->size; 64 61 data_offs = ROUND_UP(hdr_size, 4); 65 62 … … 70 67 hdr = (ip_header_t *)data; 71 68 hdr->ver_ihl = (4 << VI_VERSION_l) | (hdr_size / sizeof(uint32_t)); 72 hdr->tos = dgram->tos;69 hdr->tos = packet->tos; 73 70 hdr->tot_len = host2uint16_t_be(size); 74 71 hdr->id = host2uint16_t_be(42); 75 hdr->flags_foff = host2uint16_t_be(df ? BIT_V(uint16_t, FF_FLAG_DF) : 0); 76 hdr->ttl = ttl; 72 hdr->flags_foff = host2uint16_t_be(packet->df ? 73 BIT_V(uint16_t, FF_FLAG_DF) : 0); 74 hdr->ttl = packet->ttl; 77 75 hdr->proto = 0; 78 76 hdr->chksum = 0; 79 hdr->src_addr = host2uint32_t_be( dgram->src.ipv4);80 hdr->dest_addr = host2uint32_t_be( dgram->dest.ipv4);77 hdr->src_addr = host2uint32_t_be(packet->src.ipv4); 78 hdr->dest_addr = host2uint32_t_be(packet->dest.ipv4); 81 79 82 memcpy((uint8_t *)data + data_offs, dgram->data, dgram->size);80 memcpy((uint8_t *)data + data_offs, packet->data, packet->size); 83 81 84 82 *rdata = data; … … 87 85 } 88 86 89 int inet_pdu_decode(void *data, size_t size, inet_dgram_t *dgram, uint8_t *ttl, 90 int *df) 87 int inet_pdu_decode(void *data, size_t size, inet_packet_t *packet) 91 88 { 92 89 ip_header_t *hdr; … … 131 128 /* XXX Checksum */ 132 129 133 dgram->src.ipv4 = uint32_t_be2host(hdr->src_addr);134 dgram->dest.ipv4 = uint32_t_be2host(hdr->dest_addr);135 dgram->tos = hdr->tos;136 *ttl = hdr->ttl;137 *df = (uint16_t_be2host(hdr->tos) & BIT_V(uint16_t, FF_FLAG_DF)) ?138 1 : 0;130 packet->src.ipv4 = uint32_t_be2host(hdr->src_addr); 131 packet->dest.ipv4 = uint32_t_be2host(hdr->dest_addr); 132 packet->tos = hdr->tos; 133 packet->ttl = hdr->ttl; 134 packet->df = (uint16_t_be2host(hdr->tos) & BIT_V(uint16_t, FF_FLAG_DF)) 135 ? 1 : 0; 139 136 140 137 /* XXX IP options */ … … 142 139 VI_IHL_l, hdr->ver_ihl); 143 140 144 dgram->size = tot_len - data_offs;145 dgram->data = calloc(dgram->size, 1);146 if ( dgram->data == NULL) {141 packet->size = tot_len - data_offs; 142 packet->data = calloc(packet->size, 1); 143 if (packet->data == NULL) { 147 144 log_msg(LVL_WARN, "Out of memory."); 148 145 return ENOMEM; 149 146 } 150 147 151 memcpy( dgram->data, (uint8_t *)data + data_offs, dgram->size);148 memcpy(packet->data, (uint8_t *)data + data_offs, packet->size); 152 149 153 150 return EOK; -
uspace/srv/inet/pdu.h
rbd8bfc5a rfe4310f 40 40 #include "inet.h" 41 41 42 extern int inet_pdu_encode(inet_ dgram_t *, uint8_t, int, void **, size_t *);43 extern int inet_pdu_decode(void *, size_t, inet_ dgram_t *, uint8_t *, int *);42 extern int inet_pdu_encode(inet_packet_t *, void **, size_t *); 43 extern int inet_pdu_decode(void *, size_t, inet_packet_t *); 44 44 45 45 #endif
Note:
See TracChangeset
for help on using the changeset viewer.