00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef IPV4_IMPL_H
00021 #define IPV4_IMPL_H
00022
00023 #include "ns3/ipv4.h"
00024 #include "ns3/ptr.h"
00025
00026 namespace ns3 {
00027
00028 class Ipv4L3Protocol;
00029
00030 class Ipv4Impl : public Ipv4
00031 {
00032 public:
00033 Ipv4Impl ();
00034
00035 virtual ~Ipv4Impl ();
00036
00037 void SetIpv4 (Ptr<Ipv4L3Protocol> ipv4);
00038
00039 virtual void AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol,
00040 int16_t priority);
00041
00042 virtual void AddHostRouteTo (Ipv4Address dest,
00043 Ipv4Address nextHop,
00044 uint32_t interface);
00045 virtual void AddHostRouteTo (Ipv4Address dest,
00046 uint32_t interface);
00047 virtual void AddNetworkRouteTo (Ipv4Address network,
00048 Ipv4Mask networkMask,
00049 Ipv4Address nextHop,
00050 uint32_t interface);
00051 virtual void AddNetworkRouteTo (Ipv4Address network,
00052 Ipv4Mask networkMask,
00053 uint32_t interface);
00054 virtual void SetDefaultRoute (Ipv4Address nextHop,
00055 uint32_t interface);
00056 virtual uint32_t GetNRoutes (void);
00057 virtual Ipv4Route GetRoute (uint32_t i);
00058 virtual void RemoveRoute (uint32_t i);
00059
00060
00061 virtual void AddMulticastRoute (Ipv4Address origin,
00062 Ipv4Address group,
00063 uint32_t inputInterface,
00064 std::vector<uint32_t> outputInterfaces);
00065
00066 virtual void SetDefaultMulticastRoute (uint32_t outputInterface);
00067
00068 virtual uint32_t GetNMulticastRoutes (void) const;
00069 virtual Ipv4MulticastRoute GetMulticastRoute (uint32_t i) const;
00070
00071 virtual void RemoveMulticastRoute (Ipv4Address origin,
00072 Ipv4Address group,
00073 uint32_t inputInterface);
00074 virtual void RemoveMulticastRoute (uint32_t i);
00075
00076 virtual uint32_t AddInterface (Ptr<NetDevice> device);
00077 virtual uint32_t GetNInterfaces (void);
00078
00079 virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const;
00080 virtual uint32_t FindInterfaceForAddr (Ipv4Address addr,
00081 Ipv4Mask mask) const;
00082
00083 virtual int32_t FindInterfaceForDevice (Ptr<NetDevice> device) const;
00084
00085 virtual Ptr<NetDevice> GetNetDevice(uint32_t i);
00086
00087 virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group);
00088 virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group);
00089
00090 virtual void SetAddress (uint32_t i, Ipv4Address address);
00091 virtual void SetNetworkMask (uint32_t i, Ipv4Mask mask);
00092 virtual Ipv4Mask GetNetworkMask (uint32_t t) const;
00093 virtual Ipv4Address GetAddress (uint32_t i) const;
00094 virtual void SetMetric (uint32_t i, uint16_t metric);
00095 virtual uint16_t GetMetric (uint32_t i) const;
00096 virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const;
00097 virtual bool GetIfIndexForDestination (Ipv4Address dest,
00098 uint32_t &ifIndex) const;
00099
00100 virtual uint16_t GetMtu (uint32_t i) const;
00101 virtual bool IsUp (uint32_t i) const;
00102 virtual void SetUp (uint32_t i);
00103 virtual void SetDown (uint32_t i);
00104 protected:
00105 virtual void DoDispose (void);
00106 private:
00107 Ptr<Ipv4L3Protocol> m_ipv4;
00108 };
00109
00110 }
00111
00112 #endif