inet.hh (5761:94d56a48d7e3) | inet.hh (5782:ff12aefd2cc2) |
---|---|
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; --- 126 unchanged lines hidden (view full) --- 135 operator const EthHdr *() const { return (const EthHdr *)p->data; } 136 137 const EthPtr &operator=(const EthPacketPtr &ptr) { p = ptr; return *this; } 138 139 const EthPacketPtr packet() const { return p; } 140 EthPacketPtr packet() { return p; } 141 bool operator!() const { return !p; } 142 operator bool() const { return p; } | 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; --- 126 unchanged lines hidden (view full) --- 135 operator const EthHdr *() const { return (const EthHdr *)p->data; } 136 137 const EthPtr &operator=(const EthPacketPtr &ptr) { p = ptr; return *this; } 138 139 const EthPacketPtr packet() const { return p; } 140 EthPacketPtr packet() { return p; } 141 bool operator!() const { return !p; } 142 operator bool() const { return p; } |
143 int off() const { return 0; } 144 int pstart() const { return off() + ((const EthHdr*)p->data)->size(); } |
|
143}; 144 145/* 146 * IP Stuff 147 */ 148struct IpOpt; 149struct IpHdr : public ip_hdr 150{ --- 60 unchanged lines hidden (view full) --- 211 const IpPtr &operator=(const EthPacketPtr &ptr) { set(ptr); return *this; } 212 const IpPtr &operator=(const EthPtr &ptr) { set(ptr.p); return *this; } 213 const IpPtr &operator=(const IpPtr &ptr) { p = ptr.p; return *this; } 214 215 const EthPacketPtr packet() const { return p; } 216 EthPacketPtr packet() { return p; } 217 bool operator!() const { return !p; } 218 operator bool() const { return p; } | 145}; 146 147/* 148 * IP Stuff 149 */ 150struct IpOpt; 151struct IpHdr : public ip_hdr 152{ --- 60 unchanged lines hidden (view full) --- 213 const IpPtr &operator=(const EthPacketPtr &ptr) { set(ptr); return *this; } 214 const IpPtr &operator=(const EthPtr &ptr) { set(ptr.p); return *this; } 215 const IpPtr &operator=(const IpPtr &ptr) { p = ptr.p; return *this; } 216 217 const EthPacketPtr packet() const { return p; } 218 EthPacketPtr packet() { return p; } 219 bool operator!() const { return !p; } 220 operator bool() const { return p; } |
221 int off() const { return sizeof(eth_hdr); } 222 int pstart() const { return off() + get()->size(); } |
|
219}; 220 221uint16_t cksum(const IpPtr &ptr); 222 223struct IpOpt : public ip_opt 224{ 225 uint8_t type() const { return opt_type; } 226 uint8_t typeNumber() const { return IP_OPT_NUMBER(opt_type); } --- 47 unchanged lines hidden (view full) --- 274 uint8_t *bytes() { return (uint8_t *)this; } 275 uint8_t *payload() { return bytes() + size(); } 276}; 277 278class TcpPtr 279{ 280 protected: 281 EthPacketPtr p; | 223}; 224 225uint16_t cksum(const IpPtr &ptr); 226 227struct IpOpt : public ip_opt 228{ 229 uint8_t type() const { return opt_type; } 230 uint8_t typeNumber() const { return IP_OPT_NUMBER(opt_type); } --- 47 unchanged lines hidden (view full) --- 278 uint8_t *bytes() { return (uint8_t *)this; } 279 uint8_t *payload() { return bytes() + size(); } 280}; 281 282class TcpPtr 283{ 284 protected: 285 EthPacketPtr p; |
282 int off; | 286 int _off; |
283 | 287 |
284 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } | 288 void set(const EthPacketPtr &ptr, int offset) { p = ptr; _off = offset; } |
285 void set(const IpPtr &ptr) 286 { 287 if (ptr && ptr->proto() == IP_PROTO_TCP) 288 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 289 else 290 set(0, 0); 291 } 292 293 public: | 289 void set(const IpPtr &ptr) 290 { 291 if (ptr && ptr->proto() == IP_PROTO_TCP) 292 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 293 else 294 set(0, 0); 295 } 296 297 public: |
294 TcpPtr() : p(0), off(0) {} 295 TcpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } 296 TcpPtr(const TcpPtr &ptr) : p(ptr.p), off(ptr.off) {} | 298 TcpPtr() : p(0), _off(0) {} 299 TcpPtr(const IpPtr &ptr) : p(0), _off(0) { set(ptr); } 300 TcpPtr(const TcpPtr &ptr) : p(ptr.p), _off(ptr._off) {} |
297 | 301 |
298 TcpHdr *get() { return (TcpHdr *)(p->data + off); } | 302 TcpHdr *get() { return (TcpHdr *)(p->data + _off); } |
299 TcpHdr *operator->() { return get(); } 300 TcpHdr &operator*() { return *get(); } 301 | 303 TcpHdr *operator->() { return get(); } 304 TcpHdr &operator*() { return *get(); } 305 |
302 const TcpHdr *get() const { return (const TcpHdr *)(p->data + off); } | 306 const TcpHdr *get() const { return (const TcpHdr *)(p->data + _off); } |
303 const TcpHdr *operator->() const { return get(); } 304 const TcpHdr &operator*() const { return *get(); } 305 306 const TcpPtr &operator=(const IpPtr &i) { set(i); return *this; } | 307 const TcpHdr *operator->() const { return get(); } 308 const TcpHdr &operator*() const { return *get(); } 309 310 const TcpPtr &operator=(const IpPtr &i) { set(i); return *this; } |
307 const TcpPtr &operator=(const TcpPtr &t) { set(t.p, t.off); return *this; } | 311 const TcpPtr &operator=(const TcpPtr &t) { set(t.p, t._off); return *this; } |
308 309 const EthPacketPtr packet() const { return p; } 310 EthPacketPtr packet() { return p; } 311 bool operator!() const { return !p; } 312 operator bool() const { return p; } | 312 313 const EthPacketPtr packet() const { return p; } 314 EthPacketPtr packet() { return p; } 315 bool operator!() const { return !p; } 316 operator bool() const { return p; } |
317 int off() const { return _off; } 318 int pstart() const { return off() + get()->size(); } |
|
313}; 314 315uint16_t cksum(const TcpPtr &ptr); 316 317typedef Range<uint16_t> SackRange; 318 319struct TcpOpt : public tcp_opt 320{ --- 40 unchanged lines hidden (view full) --- 361 uint8_t *bytes() { return (uint8_t *)this; } 362 uint8_t *payload() { return bytes() + size(); } 363}; 364 365class UdpPtr 366{ 367 protected: 368 EthPacketPtr p; | 319}; 320 321uint16_t cksum(const TcpPtr &ptr); 322 323typedef Range<uint16_t> SackRange; 324 325struct TcpOpt : public tcp_opt 326{ --- 40 unchanged lines hidden (view full) --- 367 uint8_t *bytes() { return (uint8_t *)this; } 368 uint8_t *payload() { return bytes() + size(); } 369}; 370 371class UdpPtr 372{ 373 protected: 374 EthPacketPtr p; |
369 int off; | 375 int _off; |
370 | 376 |
371 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } | 377 void set(const EthPacketPtr &ptr, int offset) { p = ptr; _off = offset; } |
372 void set(const IpPtr &ptr) 373 { 374 if (ptr && ptr->proto() == IP_PROTO_UDP) 375 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 376 else 377 set(0, 0); 378 } 379 380 public: | 378 void set(const IpPtr &ptr) 379 { 380 if (ptr && ptr->proto() == IP_PROTO_UDP) 381 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 382 else 383 set(0, 0); 384 } 385 386 public: |
381 UdpPtr() : p(0), off(0) {} 382 UdpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } 383 UdpPtr(const UdpPtr &ptr) : p(ptr.p), off(ptr.off) {} | 387 UdpPtr() : p(0), _off(0) {} 388 UdpPtr(const IpPtr &ptr) : p(0), _off(0) { set(ptr); } 389 UdpPtr(const UdpPtr &ptr) : p(ptr.p), _off(ptr._off) {} |
384 | 390 |
385 UdpHdr *get() { return (UdpHdr *)(p->data + off); } | 391 UdpHdr *get() { return (UdpHdr *)(p->data + _off); } |
386 UdpHdr *operator->() { return get(); } 387 UdpHdr &operator*() { return *get(); } 388 | 392 UdpHdr *operator->() { return get(); } 393 UdpHdr &operator*() { return *get(); } 394 |
389 const UdpHdr *get() const { return (const UdpHdr *)(p->data + off); } | 395 const UdpHdr *get() const { return (const UdpHdr *)(p->data + _off); } |
390 const UdpHdr *operator->() const { return get(); } 391 const UdpHdr &operator*() const { return *get(); } 392 393 const UdpPtr &operator=(const IpPtr &i) { set(i); return *this; } | 396 const UdpHdr *operator->() const { return get(); } 397 const UdpHdr &operator*() const { return *get(); } 398 399 const UdpPtr &operator=(const IpPtr &i) { set(i); return *this; } |
394 const UdpPtr &operator=(const UdpPtr &t) { set(t.p, t.off); return *this; } | 400 const UdpPtr &operator=(const UdpPtr &t) { set(t.p, t._off); return *this; } |
395 396 const EthPacketPtr packet() const { return p; } 397 EthPacketPtr packet() { return p; } 398 bool operator!() const { return !p; } 399 operator bool() const { return p; } | 401 402 const EthPacketPtr packet() const { return p; } 403 EthPacketPtr packet() { return p; } 404 bool operator!() const { return !p; } 405 operator bool() const { return p; } |
406 int off() const { return _off; } 407 int pstart() const { return off() + get()->size(); } |
|
400}; 401 402uint16_t cksum(const UdpPtr &ptr); 403 | 408}; 409 410uint16_t cksum(const UdpPtr &ptr); 411 |
412int hsplit(const EthPacketPtr &ptr); 413 |
|
404/* namespace Net */ } 405 406#endif // __BASE_INET_HH__ | 414/* namespace Net */ } 415 416#endif // __BASE_INET_HH__ |