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__