Deleted Added
sdiff udiff text old ( 2665:a124942bacb8 ) new ( 5484:dc6a459769a1 )
full compact
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 {
188 EthHdr *eth = (EthHdr *)ptr->data;
189 if (eth->type() == ETH_TYPE_IP)
190 p = ptr;
191 else
192 p = 0;
193 }
194
195 public:
196 IpPtr() {}
197 IpPtr(const EthPacketPtr &ptr) { set(ptr); }
198 IpPtr(const EthPtr &ptr) { set(ptr.p); }
199 IpPtr(const IpPtr &ptr) : p(ptr.p) { }
200
201 IpHdr *operator->() { return h(); }
202 IpHdr &operator*() { return *h(); }
203 operator IpHdr *() { return h(); }
204
205 const IpHdr *operator->() const { return h(); }
206 const IpHdr &operator*() const { return *h(); }
207 operator const IpHdr *() const { return h(); }
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; }
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
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 {
287 if (ptr->proto() == IP_PROTO_TCP)
288 set(ptr.p, sizeof(eth_hdr) + ptr->hlen());
289 else
290 set(0, 0);
291 }
292
293 public:
294 TcpPtr() {}
295 TcpPtr(const IpPtr &ptr) { set(ptr); }
296 TcpPtr(const TcpPtr &ptr) : p(ptr.p), off(ptr.off) {}
297
298 TcpHdr *operator->() { return h(); }
299 TcpHdr &operator*() { return *h(); }
300 operator TcpHdr *() { return h(); }
301
302 const TcpHdr *operator->() const { return h(); }
303 const TcpHdr &operator*() const { return *h(); }
304 operator const TcpHdr *() const { return h(); }
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; }
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
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 {
377 if (ptr->proto() == IP_PROTO_UDP)
378 set(ptr.p, sizeof(eth_hdr) + ptr->hlen());
379 else
380 set(0, 0);
381 }
382
383 public:
384 UdpPtr() {}
385 UdpPtr(const IpPtr &ptr) { set(ptr); }
386 UdpPtr(const UdpPtr &ptr) : p(ptr.p), off(ptr.off) {}
387
388 UdpHdr *operator->() { return h(); }
389 UdpHdr &operator*() { return *h(); }
390 operator UdpHdr *() { return h(); }
391
392 const UdpHdr *operator->() const { return h(); }
393 const UdpHdr &operator*() const { return *h(); }
394 operator const UdpHdr *() const { return h(); }
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; }
403 operator bool() { return p; }
404};
405
406uint16_t cksum(const UdpPtr &ptr);
407
408/* namespace Net */ }
409
410#endif // __BASE_INET_HH__