src/internet-stack/ipv4-netfilter.h
changeset 4638 19aa5f9b4bdf
parent 4636 be76844f7b75
     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 */