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__