A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ipv6-l3-protocol.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007-2009 Strasbourg University
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19  */
20 
21 #ifndef IPV6_L3_PROTOCOL_H
22 #define IPV6_L3_PROTOCOL_H
23 
24 #include <list>
25 
26 #include "ns3/traced-callback.h"
27 #include "ns3/net-device.h"
28 #include "ns3/ipv6.h"
29 #include "ns3/ipv6-address.h"
30 #include "ns3/ipv6-header.h"
31 
32 namespace ns3
33 {
34 
35 class Node;
36 class Ipv6Interface;
37 class IpL4Protocol;
38 class Ipv6Route;
39 class Ipv6MulticastRoute;
40 class Ipv6RawSocketImpl;
41 class Icmpv6L4Protocol;
42 class Ipv6AutoconfiguredPrefix;
43 
58 class Ipv6L3Protocol : public Ipv6
59 {
60 public:
65  static TypeId GetTypeId ();
66 
70  static const uint16_t PROT_NUMBER;
71 
76  enum DropReason
77  {
83  };
84 
88  Ipv6L3Protocol ();
89 
93  virtual ~Ipv6L3Protocol ();
94 
99  void SetNode (Ptr<Node> node);
100 
105  void Insert (Ptr<IpL4Protocol> protocol);
106 
111  void Remove (Ptr<IpL4Protocol> protocol);
112 
118  Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
119 
125 
130  void DeleteRawSocket (Ptr<Socket> socket);
131 
136  void SetDefaultTtl (uint8_t ttl);
137 
142  void SetDefaultTclass (uint8_t tclass);
143 
155  void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType);
156 
167  void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route);
168 
173  void SetRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol);
174 
180 
186  uint32_t AddInterface (Ptr<NetDevice> device);
187 
193  Ptr<Ipv6Interface> GetInterface (uint32_t i) const;
194 
199  uint32_t GetNInterfaces () const;
200 
206  int32_t GetInterfaceForAddress (Ipv6Address addr) const;
207 
214  int32_t GetInterfaceForPrefix (Ipv6Address addr, Ipv6Prefix mask) const;
215 
220  int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const;
221 
227  bool AddAddress (uint32_t i, Ipv6InterfaceAddress address);
228 
235  Ipv6InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
236 
242  uint32_t GetNAddresses (uint32_t interface) const;
243 
249  bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
250 
256  void SetMetric (uint32_t i, uint16_t metric);
257 
263  uint16_t GetMetric (uint32_t i) const;
264 
270  uint16_t GetMtu (uint32_t i) const;
271 
276  bool IsUp (uint32_t i) const;
277 
282  void SetUp (uint32_t i);
283 
288  void SetDown (uint32_t i);
289 
294  bool IsForwarding (uint32_t i) const;
295 
301  void SetForwarding (uint32_t i, bool val);
302 
308  Ptr<NetDevice> GetNetDevice (uint32_t i);
309 
315 
326  void AddAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, Ipv6Address defaultRouter = Ipv6Address::GetZero ());
327 
337  void RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter);
338 
342  virtual void RegisterExtensions ();
343 
347  virtual void RegisterOptions ();
348 
349 protected:
353  virtual void DoDispose ();
354 
360  virtual void NotifyNewAggregate ();
361 
362 private:
363  /* for unit-tests */
366 
367  typedef std::list<Ptr<Ipv6Interface> > Ipv6InterfaceList;
368  typedef std::list<Ptr<Ipv6RawSocketImpl> > SocketList;
369  typedef std::list<Ptr<IpL4Protocol> > L4List_t;
370 
371  typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> > Ipv6AutoconfiguredPrefixList;
372  typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator Ipv6AutoconfiguredPrefixListI;
373 
378 
383 
388 
393  Ipv6L3Protocol (const Ipv6L3Protocol& o);
394 
400 
410  Ipv6Header BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol,
411  uint16_t payloadSize, uint8_t hopLimit, uint8_t tclass);
412 
419  void SendRealOut (Ptr<Ipv6Route> route, Ptr<Packet> packet, Ipv6Header const& ipHeader);
420 
427  void IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
428 
436 
443  void LocalDeliver (Ptr<const Packet> p, Ipv6Header const& ip, uint32_t iif);
444 
451  void RouteInputError (Ptr<const Packet> p, const Ipv6Header& ipHeader, Socket::SocketErrno sockErrno);
452 
458  uint32_t AddIpv6Interface (Ptr<Ipv6Interface> interface);
459 
463  void SetupLoopback ();
464 
469  virtual void SetIpForward (bool forward);
470 
475  virtual bool GetIpForward () const;
476 
481  virtual void SetSendIcmpv6Redirect (bool sendIcmpv6Redirect);
482 
487  virtual bool GetSendIcmpv6Redirect () const;
488 
493 
498 
503 
508 
512  uint32_t m_nInterfaces;
513 
517  uint8_t m_defaultTtl;
518 
523 
528 
533 
538 
543 };
544 
545 } /* namespace ns3 */
546 
547 #endif /* IPV6_L3_PROTOCOL_H */
548