diff options
Diffstat (limited to 'extras/libmemif/examples/common/icmp_proto.c')
-rw-r--r-- | extras/libmemif/examples/common/icmp_proto.c | 59 |
1 files changed, 7 insertions, 52 deletions
diff --git a/extras/libmemif/examples/common/icmp_proto.c b/extras/libmemif/examples/common/icmp_proto.c index fafc8e425b9..70825eafdb2 100644 --- a/extras/libmemif/examples/common/icmp_proto.c +++ b/extras/libmemif/examples/common/icmp_proto.c @@ -198,54 +198,6 @@ resolve_icmp (struct icmphdr *icmp, void *icmp_resp) return sizeof (struct icmphdr); } -int -resolve_packet (void *in_pck, ssize_t in_size, void *out_pck, - uint32_t *out_size, uint8_t ip_addr[4], uint8_t hw_addr[6]) -{ - struct ether_header *eh; - struct ether_arp *eah; - struct iphdr *ip, *ip_out; - struct icmphdr *icmp; - *out_size = 0; - - if ((in_pck == NULL) || (out_pck == NULL)) - return -1; - - eh = (struct ether_header *) in_pck; - *out_size = resolve_eth (eh, out_pck, hw_addr); - - if (eh->ether_type == 0x0608) - { - eah = (struct ether_arp *) (in_pck + *out_size); - *out_size += resolve_eth_arp (eah, out_pck + *out_size, ip_addr); - } - else if (eh->ether_type == 0x0008) - { -#ifdef ICMP_DBG - print_packet (in_pck + *out_size); -#endif - ip = (struct iphdr *) (in_pck + *out_size); - ip_out = (struct iphdr *) (out_pck + *out_size); - *out_size += resolve_ip (ip, out_pck + *out_size, ip_addr); - if (ip->protocol == 1) - { - icmp = (struct icmphdr *) (in_pck + *out_size); - *out_size += resolve_icmp (icmp, out_pck + *out_size); - ((struct icmphdr *) (out_pck + *out_size - sizeof (struct icmphdr))) - ->checksum = cksum (out_pck + *out_size - sizeof (struct icmphdr), - sizeof (struct icmphdr)); - /* payload */ - memcpy (out_pck + *out_size, in_pck + *out_size, - in_size - *out_size); - *out_size = in_size; - ip_out->tot_len = - __bswap_16 (*out_size - sizeof (struct ether_header)); - ip_out->check = cksum (ip_out, sizeof (struct iphdr)); - } - } - return 0; -} - static ssize_t generate_eth (struct ether_header *eh, uint8_t hw_daddr[6]) { @@ -373,8 +325,8 @@ generate_packet2 (void *pck, uint32_t *size, uint8_t saddr[4], while (0) int -resolve_packet_zero_copy (void *pck, uint32_t *size, uint8_t ip_addr[4], - uint8_t hw_addr[6]) +resolve_packet (void *pck, uint32_t *size, uint8_t ip_addr[4], + uint8_t hw_addr[6]) { struct ether_header *eh; struct ether_arp *eah; @@ -385,6 +337,10 @@ resolve_packet_zero_copy (void *pck, uint32_t *size, uint8_t ip_addr[4], if (pck == NULL) return 0; +#ifdef ICMP_DBG + print_packet (pck); +#endif + GET_HEADER (eh, struct ether_header, pck, offset); memcpy (eh->ether_dhost, eh->ether_shost, 6); @@ -450,8 +406,7 @@ resolve_packet_zero_copy (void *pck, uint32_t *size, uint8_t ip_addr[4], } int -resolve_packet_zero_copy_add_encap (void **pck_, uint32_t *size, - uint8_t ip_addr[4]) +resolve_packet_with_encap (void **pck_, uint32_t *size, uint8_t ip_addr[4]) { struct ether_header *eh; struct iphdr *ip; |