1/* 2 * Copyright (c) 2002-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 165 unchanged lines hidden (view full) --- 174 175class IpPtr 176{ 177 protected: 178 friend class TcpPtr; 179 friend class UdpPtr; 180 EthPacketPtr p; 181 |
182 void set(const EthPacketPtr &ptr) 183 { |
184 p = 0; 185 186 if (ptr) { 187 EthHdr *eth = (EthHdr *)ptr->data; 188 if (eth->type() == ETH_TYPE_IP) 189 p = ptr; 190 } |
191 } 192 193 public: |
194 IpPtr() : p(0) {} 195 IpPtr(const EthPacketPtr &ptr) : p(0) { set(ptr); } 196 IpPtr(const EthPtr &ptr) : p(0) { set(ptr.p); } |
197 IpPtr(const IpPtr &ptr) : p(ptr.p) { } 198 |
199 IpHdr *get() { return (IpHdr *)(p->data + sizeof(eth_hdr)); } 200 IpHdr *operator->() { return get(); } 201 IpHdr &operator*() { return *get(); } |
202 |
203 const IpHdr *get() const 204 { return (const IpHdr *)(p->data + sizeof(eth_hdr)); } 205 const IpHdr *operator->() const { return get(); } 206 const IpHdr &operator*() const { return *get(); } |
207 208 const IpPtr &operator=(const EthPacketPtr &ptr) { set(ptr); return *this; } 209 const IpPtr &operator=(const EthPtr &ptr) { set(ptr.p); return *this; } 210 const IpPtr &operator=(const IpPtr &ptr) { p = ptr.p; return *this; } 211 212 const EthPacketPtr packet() const { return p; } 213 EthPacketPtr packet() { return p; } 214 bool operator!() const { return !p; } 215 operator bool() const { return p; } |
216}; 217 218uint16_t cksum(const IpPtr &ptr); 219 220struct IpOpt : public ip_opt 221{ 222 uint8_t type() const { return opt_type; } 223 uint8_t typeNumber() const { return IP_OPT_NUMBER(opt_type); } --- 47 unchanged lines hidden (view full) --- 271}; 272 273class TcpPtr 274{ 275 protected: 276 EthPacketPtr p; 277 int off; 278 |
279 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 280 void set(const IpPtr &ptr) 281 { |
282 if (ptr && ptr->proto() == IP_PROTO_TCP) |
283 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 284 else 285 set(0, 0); 286 } 287 288 public: |
289 TcpPtr() : p(0), off(0) {} 290 TcpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } |
291 TcpPtr(const TcpPtr &ptr) : p(ptr.p), off(ptr.off) {} 292 |
293 TcpHdr *get() { return (TcpHdr *)(p->data + off); } 294 TcpHdr *operator->() { return get(); } 295 TcpHdr &operator*() { return *get(); } |
296 |
297 const TcpHdr *get() const { return (const TcpHdr *)(p->data + off); } 298 const TcpHdr *operator->() const { return get(); } 299 const TcpHdr &operator*() const { return *get(); } |
300 301 const TcpPtr &operator=(const IpPtr &i) { set(i); return *this; } 302 const TcpPtr &operator=(const TcpPtr &t) { set(t.p, t.off); return *this; } 303 304 const EthPacketPtr packet() const { return p; } 305 EthPacketPtr packet() { return p; } 306 bool operator!() const { return !p; } 307 operator bool() const { return p; } |
308}; 309 310uint16_t cksum(const TcpPtr &ptr); 311 312typedef Range<uint16_t> SackRange; 313 314struct TcpOpt : public tcp_opt 315{ --- 41 unchanged lines hidden (view full) --- 357}; 358 359class UdpPtr 360{ 361 protected: 362 EthPacketPtr p; 363 int off; 364 |
365 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 366 void set(const IpPtr &ptr) 367 { |
368 if (ptr && ptr->proto() == IP_PROTO_UDP) |
369 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 370 else 371 set(0, 0); 372 } 373 374 public: |
375 UdpPtr() : p(0), off(0) {} 376 UdpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } |
377 UdpPtr(const UdpPtr &ptr) : p(ptr.p), off(ptr.off) {} 378 |
379 UdpHdr *get() { return (UdpHdr *)(p->data + off); } 380 UdpHdr *operator->() { return get(); } 381 UdpHdr &operator*() { return *get(); } |
382 |
383 const UdpHdr *get() const { return (const UdpHdr *)(p->data + off); } 384 const UdpHdr *operator->() const { return get(); } 385 const UdpHdr &operator*() const { return *get(); } |
386 387 const UdpPtr &operator=(const IpPtr &i) { set(i); return *this; } 388 const UdpPtr &operator=(const UdpPtr &t) { set(t.p, t.off); return *this; } 389 390 const EthPacketPtr packet() const { return p; } 391 EthPacketPtr packet() { return p; } 392 bool operator!() const { return !p; } 393 operator bool() const { return p; } |
394}; 395 396uint16_t cksum(const UdpPtr &ptr); 397 398/* namespace Net */ } 399 400#endif // __BASE_INET_HH__ |