Changeset fe4310f in mainline for uspace/srv/inet/pdu.c
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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;
Note:
See TracChangeset
for help on using the changeset viewer.