inet.hh (2665:a124942bacb8) | inet.hh (5484:dc6a459769a1) |
---|---|
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 | 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 const IpHdr *h() const 183 { return (const IpHdr *)(p->data + sizeof(eth_hdr)); } 184 IpHdr *h() { return (IpHdr *)(p->data + sizeof(eth_hdr)); } 185 | |
186 void set(const EthPacketPtr &ptr) 187 { | 182 void set(const EthPacketPtr &ptr) 183 { |
188 EthHdr *eth = (EthHdr *)ptr->data; 189 if (eth->type() == ETH_TYPE_IP) 190 p = ptr; 191 else 192 p = 0; | 184 p = 0; 185 186 if (ptr) { 187 EthHdr *eth = (EthHdr *)ptr->data; 188 if (eth->type() == ETH_TYPE_IP) 189 p = ptr; 190 } |
193 } 194 195 public: | 191 } 192 193 public: |
196 IpPtr() {} 197 IpPtr(const EthPacketPtr &ptr) { set(ptr); } 198 IpPtr(const EthPtr &ptr) { set(ptr.p); } | 194 IpPtr() : p(0) {} 195 IpPtr(const EthPacketPtr &ptr) : p(0) { set(ptr); } 196 IpPtr(const EthPtr &ptr) : p(0) { set(ptr.p); } |
199 IpPtr(const IpPtr &ptr) : p(ptr.p) { } 200 | 197 IpPtr(const IpPtr &ptr) : p(ptr.p) { } 198 |
201 IpHdr *operator->() { return h(); } 202 IpHdr &operator*() { return *h(); } 203 operator IpHdr *() { return h(); } | 199 IpHdr *get() { return (IpHdr *)(p->data + sizeof(eth_hdr)); } 200 IpHdr *operator->() { return get(); } 201 IpHdr &operator*() { return *get(); } |
204 | 202 |
205 const IpHdr *operator->() const { return h(); } 206 const IpHdr &operator*() const { return *h(); } 207 operator const IpHdr *() const { return h(); } | 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(); } |
208 209 const IpPtr &operator=(const EthPacketPtr &ptr) { set(ptr); return *this; } 210 const IpPtr &operator=(const EthPtr &ptr) { set(ptr.p); return *this; } 211 const IpPtr &operator=(const IpPtr &ptr) { p = ptr.p; return *this; } 212 213 const EthPacketPtr packet() const { return p; } 214 EthPacketPtr packet() { return p; } 215 bool operator!() const { return !p; } 216 operator bool() const { return p; } | 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; } |
217 operator bool() { return p; } | |
218}; 219 220uint16_t cksum(const IpPtr &ptr); 221 222struct IpOpt : public ip_opt 223{ 224 uint8_t type() const { return opt_type; } 225 uint8_t typeNumber() const { return IP_OPT_NUMBER(opt_type); } --- 47 unchanged lines hidden (view full) --- 273}; 274 275class TcpPtr 276{ 277 protected: 278 EthPacketPtr p; 279 int off; 280 | 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 |
281 const TcpHdr *h() const { return (const TcpHdr *)(p->data + off); } 282 TcpHdr *h() { return (TcpHdr *)(p->data + off); } 283 | |
284 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 285 void set(const IpPtr &ptr) 286 { | 279 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 280 void set(const IpPtr &ptr) 281 { |
287 if (ptr->proto() == IP_PROTO_TCP) | 282 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: | 283 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 284 else 285 set(0, 0); 286 } 287 288 public: |
294 TcpPtr() {} 295 TcpPtr(const IpPtr &ptr) { set(ptr); } | 289 TcpPtr() : p(0), off(0) {} 290 TcpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } |
296 TcpPtr(const TcpPtr &ptr) : p(ptr.p), off(ptr.off) {} 297 | 291 TcpPtr(const TcpPtr &ptr) : p(ptr.p), off(ptr.off) {} 292 |
298 TcpHdr *operator->() { return h(); } 299 TcpHdr &operator*() { return *h(); } 300 operator TcpHdr *() { return h(); } | 293 TcpHdr *get() { return (TcpHdr *)(p->data + off); } 294 TcpHdr *operator->() { return get(); } 295 TcpHdr &operator*() { return *get(); } |
301 | 296 |
302 const TcpHdr *operator->() const { return h(); } 303 const TcpHdr &operator*() const { return *h(); } 304 operator const TcpHdr *() const { return h(); } | 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(); } |
305 306 const TcpPtr &operator=(const IpPtr &i) { set(i); return *this; } 307 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; } | 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; } |
313 operator bool() { return p; } | |
314}; 315 316uint16_t cksum(const TcpPtr &ptr); 317 318typedef Range<uint16_t> SackRange; 319 320struct TcpOpt : public tcp_opt 321{ --- 41 unchanged lines hidden (view full) --- 363}; 364 365class UdpPtr 366{ 367 protected: 368 EthPacketPtr p; 369 int off; 370 | 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 |
371 const UdpHdr *h() const { return (const UdpHdr *)(p->data + off); } 372 UdpHdr *h() { return (UdpHdr *)(p->data + off); } 373 | |
374 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 375 void set(const IpPtr &ptr) 376 { | 365 void set(const EthPacketPtr &ptr, int offset) { p = ptr; off = offset; } 366 void set(const IpPtr &ptr) 367 { |
377 if (ptr->proto() == IP_PROTO_UDP) | 368 if (ptr && ptr->proto() == IP_PROTO_UDP) |
378 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 379 else 380 set(0, 0); 381 } 382 383 public: | 369 set(ptr.p, sizeof(eth_hdr) + ptr->hlen()); 370 else 371 set(0, 0); 372 } 373 374 public: |
384 UdpPtr() {} 385 UdpPtr(const IpPtr &ptr) { set(ptr); } | 375 UdpPtr() : p(0), off(0) {} 376 UdpPtr(const IpPtr &ptr) : p(0), off(0) { set(ptr); } |
386 UdpPtr(const UdpPtr &ptr) : p(ptr.p), off(ptr.off) {} 387 | 377 UdpPtr(const UdpPtr &ptr) : p(ptr.p), off(ptr.off) {} 378 |
388 UdpHdr *operator->() { return h(); } 389 UdpHdr &operator*() { return *h(); } 390 operator UdpHdr *() { return h(); } | 379 UdpHdr *get() { return (UdpHdr *)(p->data + off); } 380 UdpHdr *operator->() { return get(); } 381 UdpHdr &operator*() { return *get(); } |
391 | 382 |
392 const UdpHdr *operator->() const { return h(); } 393 const UdpHdr &operator*() const { return *h(); } 394 operator const UdpHdr *() const { return h(); } | 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(); } |
395 396 const UdpPtr &operator=(const IpPtr &i) { set(i); return *this; } 397 const UdpPtr &operator=(const UdpPtr &t) { set(t.p, t.off); return *this; } 398 399 const EthPacketPtr packet() const { return p; } 400 EthPacketPtr packet() { return p; } 401 bool operator!() const { return !p; } 402 operator bool() const { return p; } | 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; } |
403 operator bool() { return p; } | |
404}; 405 406uint16_t cksum(const UdpPtr &ptr); 407 408/* namespace Net */ } 409 410#endif // __BASE_INET_HH__ | 394}; 395 396uint16_t cksum(const UdpPtr &ptr); 397 398/* namespace Net */ } 399 400#endif // __BASE_INET_HH__ |