inet.hh revision 1078
12810Srdreslin@umich.edu/* 210343SCurtis.Dunham@arm.com * Copyright (c) 2002-2003 The Regents of The University of Michigan 38702Sandreas.hansson@arm.com * All rights reserved. 48702Sandreas.hansson@arm.com * 58702Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 68702Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 78702Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 88702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 98702Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 108702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 118702Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 128702Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 138702Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 142810Srdreslin@umich.edu * this software without specific prior written permission. 152810Srdreslin@umich.edu * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu#ifndef __BASE_INET_HH__ 302810Srdreslin@umich.edu#define __BASE_INET_HH__ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#include <string> 332810Srdreslin@umich.edu 342810Srdreslin@umich.edu#include "dnet/os.h" 352810Srdreslin@umich.edu 362810Srdreslin@umich.edu#include "dnet/eth.h" 372810Srdreslin@umich.edu#include "dnet/ip.h" 382810Srdreslin@umich.edu#include "dnet/ip6.h" 392810Srdreslin@umich.edu#include "dnet/addr.h" 402810Srdreslin@umich.edu#include "dnet/arp.h" 412810Srdreslin@umich.edu#include "dnet/icmp.h" 422810Srdreslin@umich.edu#include "dnet/tcp.h" 434458Sstever@eecs.umich.edu#include "dnet/udp.h" 448856Sandreas.hansson@arm.com 452810Srdreslin@umich.edu#include "dnet/intf.h" 462810Srdreslin@umich.edu#include "dnet/route.h" 472810Srdreslin@umich.edu#include "dnet/fw.h" 482810Srdreslin@umich.edu 492810Srdreslin@umich.edu#include "dnet/blob.h" 502810Srdreslin@umich.edu#include "dnet/rand.h" 512810Srdreslin@umich.edu 5211051Sandreas.hansson@arm.com#include "sim/host.hh" 5311051Sandreas.hansson@arm.com 542810Srdreslin@umich.edustd::string eaddr_string(const uint8_t a[6]); 552810Srdreslin@umich.edu 565338Sstever@gmail.comstruct EthHdr : protected eth_hdr 575338Sstever@gmail.com{ 585338Sstever@gmail.com uint16_t type() const { return ntohs(eth_type); } 5910815Sdavid.guillen@arm.com const uint8_t *payload() const { return (const uint8_t *)this + sizeof(*this); } 6011053Sandreas.hansson@arm.com uint8_t *payload() { return (uint8_t *)this + sizeof(*this); } 614458Sstever@eecs.umich.edu 624458Sstever@eecs.umich.edu bool unicast() { return eth_dst.data[0] == 0x00; } 632813Srdreslin@umich.edu bool multicast() { return eth_dst.data[0] == 0x01; } 643861Sstever@eecs.umich.edu bool broadcast() { return eth_dst.data[0] == 0xff; } 652810Srdreslin@umich.edu}; 662810Srdreslin@umich.edu 672810Srdreslin@umich.edustruct IpHdr : protected ip_hdr 682810Srdreslin@umich.edu{ 699264Sdjordje.kovacevic@arm.com uint8_t version() const { return ip_v; } 702810Srdreslin@umich.edu uint8_t hlen() const { return ip_hl; } 712810Srdreslin@umich.edu uint8_t tos() const { return ip_tos; } 722810Srdreslin@umich.edu uint16_t len() const { return ntohs(ip_len); } 732810Srdreslin@umich.edu uint16_t id() const { return ntohs(ip_id); } 7410815Sdavid.guillen@arm.com uint16_t frag_flags() const { return ntohs(ip_off) >> 13; } 7510815Sdavid.guillen@arm.com uint16_t frag_off() const { return ntohs(ip_off) & 0x1fff; } 7610815Sdavid.guillen@arm.com uint8_t ttl() const { return ip_ttl; } 772810Srdreslin@umich.edu uint8_t proto() const { return ip_p; } 782810Srdreslin@umich.edu uint16_t sum() const { return ntohs(ip_sum); } 792810Srdreslin@umich.edu uint32_t src() const { return ntohl(ip_src); } 808856Sandreas.hansson@arm.com uint32_t dst() const { return ntohl(ip_dst); } 818856Sandreas.hansson@arm.com 828856Sandreas.hansson@arm.com void sum(uint16_t sum) { ip_sum = htons(sum); } 838856Sandreas.hansson@arm.com 848856Sandreas.hansson@arm.com uint16_t ip_cksum() const; 853738Sstever@eecs.umich.edu uint16_t tu_cksum() const; 868856Sandreas.hansson@arm.com const uint8_t *payload() const { return (const uint8_t *)this + hlen(); } 873738Sstever@eecs.umich.edu uint8_t *payload() { return (uint8_t *)this + hlen(); } 888856Sandreas.hansson@arm.com}; 8910815Sdavid.guillen@arm.com 903738Sstever@eecs.umich.edustruct TcpHdr : protected tcp_hdr 918856Sandreas.hansson@arm.com{ 924478Sstever@eecs.umich.edu uint16_t sport() const { return ntohs(th_sport); } 938975Sandreas.hansson@arm.com uint16_t dport() const { return ntohs(th_dport); } 948948Sandreas.hansson@arm.com uint32_t seq() const { return ntohl(th_seq); } 958975Sandreas.hansson@arm.com uint32_t ack() const { return ntohl(th_ack); } 963738Sstever@eecs.umich.edu uint8_t off() const { return th_off; } 973738Sstever@eecs.umich.edu uint8_t flags() const { return th_flags & 0x3f; } 983738Sstever@eecs.umich.edu uint16_t win() const { return ntohs(th_win); } 993738Sstever@eecs.umich.edu uint16_t sum() const { return ntohs(th_sum); } 1008856Sandreas.hansson@arm.com uint16_t urp() const { return ntohs(th_urp); } 1019090Sandreas.hansson@arm.com 1028856Sandreas.hansson@arm.com void sum(uint16_t sum) { th_sum = htons(sum); } 1038856Sandreas.hansson@arm.com 1048856Sandreas.hansson@arm.com const uint8_t *payload() const { return (const uint8_t *)this + off(); } 10510815Sdavid.guillen@arm.com uint8_t *payload() { return (uint8_t *)this + off(); } 1068856Sandreas.hansson@arm.com}; 1078856Sandreas.hansson@arm.com 1083738Sstever@eecs.umich.edustruct UdpHdr : protected udp_hdr 1093738Sstever@eecs.umich.edu{ 1108856Sandreas.hansson@arm.com uint16_t sport() const { return ntohs(uh_sport); } 1118914Sandreas.hansson@arm.com uint16_t dport() const { return ntohs(uh_dport); } 1128914Sandreas.hansson@arm.com uint16_t len() const { return ntohs(uh_ulen); } 1138914Sandreas.hansson@arm.com uint16_t sum() const { return ntohs(uh_sum); } 1148914Sandreas.hansson@arm.com 1158914Sandreas.hansson@arm.com void sum(uint16_t sum) { uh_sum = htons(sum); } 11610713Sandreas.hansson@arm.com 1178914Sandreas.hansson@arm.com const uint8_t *payload() const { return (const uint8_t *)this + sizeof(*this); } 1188914Sandreas.hansson@arm.com uint8_t *payload() { return (uint8_t *)this + sizeof(*this); } 1198914Sandreas.hansson@arm.com}; 1208914Sandreas.hansson@arm.com 12110815Sdavid.guillen@arm.com#endif // __BASE_INET_HH__ 12210713Sandreas.hansson@arm.com