1.1 --- a/src/internet-stack/ipv4-netfilter.h Tue Jul 28 00:24:13 2009 +0600
1.2 +++ b/src/internet-stack/ipv4-netfilter.h Thu Aug 06 01:55:49 2009 +0600
1.3 @@ -28,6 +28,7 @@
1.4 #include "ns3/packet.h"
1.5 #include "ns3/conntrack-tag.h"
1.6 #include "ns3/ipv4-header.h"
1.7 +#include "ns3/object.h"
1.8 #include "ipv4-netfilter-hook.h"
1.9 #include "netfilter-callback-chain.h"
1.10 #include "netfilter-conntrack-tuple.h"
1.11 @@ -35,6 +36,8 @@
1.12 #include "netfilter-conntrack-l3-protocol.h"
1.13 #include "netfilter-conntrack-l4-protocol.h"
1.14 #include "ip-conntrack-info.h"
1.15 +#include "nat-rule.h"
1.16 +//#include "network-address-translation.h"
1.17
1.18 #define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
1.19
1.20 @@ -70,8 +73,10 @@
1.21 * Address Translation.
1.22 */
1.23
1.24 -class Ipv4Netfilter {
1.25 +class Ipv4Netfilter : public Object {
1.26 public:
1.27 + static TypeId GetTypeId (void);
1.28 +
1.29 Ipv4Netfilter ();
1.30
1.31 /**
1.32 @@ -84,7 +89,7 @@
1.33 * that hook and is called whenever a packet traverses
1.34 * that hook.
1.35 */
1.36 - uint32_t RegisterNetfilterHook (Ipv4NetfilterHook& hook);
1.37 + uint32_t RegisterNetfilterHook (Ipv4NetfilterHook hook);
1.38
1.39 /**
1.40 * \param hook The hook function to be registered
1.41 @@ -200,13 +205,16 @@
1.42 TupleHashI NewConnection (NetfilterConntrackTuple& tuple, Ptr<NetfilterConntrackL3Protocol> l3proto,
1.43 Ptr<NetfilterConntrackL4Protocol> l4proto, Ptr<Packet> packet);
1.44
1.45 - int UpdateConntrackStatus (NetfilterConntrackTuple tuple, uint32_t status);
1.46 +
1.47 + int UpdateConntrackInfo (uint8_t info);
1.48 +
1.49 uint32_t NetfilterConntrackIn (Hooks_t hook, Ptr <Packet> packet, Ptr<NetDevice> in,
1.50 Ptr<NetDevice> out, ContinueCallback& ccb);
1.51
1.52 uint32_t NetfilterConntrackConfirm (Ptr<Packet> p);
1.53 - //, NetfilterConntrackTuple& orig,
1.54 - // NetfilterConntrackTuple& reply);
1.55 +
1.56 + uint32_t NetfilterDoNat (Hooks_t hookNumber, Ptr<Packet> p,
1.57 + Ptr<NetDevice> in, Ptr<NetDevice> out, ContinueCallback& ccb);
1.58
1.59 /**
1.60 * \param inverse The inverse of the tuple should be stored here
1.61 @@ -221,8 +229,18 @@
1.62 Ptr<NetfilterConntrackL3Protocol> l3Protocol,
1.63 Ptr<NetfilterConntrackL4Protocol> l4Protocol);
1.64
1.65 - //uint32_t Ipv4Confirm(Hooks_t hookNumber, Ptr<Packet> packet, Ptr<NetDevice> in,
1.66 - // Ptr<NetDevice> out, ContinueCallback& ccb);
1.67 + TupleHash& GetHash ();
1.68 +
1.69 + void AddNatRule (NatRule natRule);
1.70 +
1.71 + std::vector<NatRule>::iterator FindNatRule (NatRule natRule);
1.72 +
1.73 + std::vector<NatRule>::iterator FindNatRule (Ipv4Address orig, Ptr<NetDevice> out);
1.74 + //static NetfilterConntrackTuple currentTuple[IP_CT_DIR_MAX];
1.75 +
1.76 + void EnableNat ();
1.77 +
1.78 + uint32_t NetfilterNatPacket (Hooks_t hookNumber, Ptr<Packet> p);
1.79
1.80 private:
1.81 NetfilterCallbackChain m_netfilterHooks[NF_INET_NUMHOOKS];
1.82 @@ -234,7 +252,24 @@
1.83 /* TODO: Should be a table once we have more L3/L4 Protocols */
1.84 Ptr<NetfilterConntrackL3Protocol> m_netfilterConntrackL3Protocols;
1.85 std::vector<Ptr<NetfilterConntrackL4Protocol> > m_netfilterConntrackL4Protocols;
1.86 +
1.87 + TranslationMap m_natMappings;
1.88 +
1.89 + NetfilterConntrackTuple currentOriginalTuple;
1.90 + NetfilterConntrackTuple currentReplyTuple;
1.91 +
1.92 + uint8_t m_enableNat;
1.93 + std::vector <NatRule> m_natRules;
1.94 +
1.95 + uint16_t nextAvailablePort;
1.96 +
1.97 + TranslationMap m_natReplyLookup;
1.98 };
1.99
1.100 +//uint16_t Ipv4Netfilter::nextAvailablePort = 1024;
1.101 +
1.102 +//NetfilterConntrackTuple Ipv4Netfilter::currentTuple = NetfilterConntrackTuple ();
1.103 +//NetfilterConntrackTuple Ipv4Netfilter::currentTuple[IP_CT_DIR_ORIGINAL] = NetfilterConntrackTuple ();
1.104 +
1.105 } // Namespace ns3
1.106 #endif /* IPV4_NETFILTER_H */