src/internet-stack/ipv4-conntrack-l3-protocol.cc
author Qasim Javed <qasimj@gmail.com>
Thu Aug 06 01:55:49 2009 +0600 (2009-08-06)
changeset 4638 19aa5f9b4bdf
parent 4636 be76844f7b75
permissions -rw-r--r--
Source NAT working! Run (examples/netfilter-example.cc)
qasimj@4634
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
qasimj@4634
     2
/* 
qasimj@4634
     3
 * Copyright (c) 2009 University of Texas at Dallas
qasimj@4634
     4
 * 
qasimj@4634
     5
 * This program is free software; you can redistribute it and/or modify
qasimj@4634
     6
 * it under the terms of the GNU General Public License version 2 as
qasimj@4634
     7
 * published by the Free Software Foundation;
qasimj@4634
     8
 *
qasimj@4634
     9
 * This program is distributed in the hope that it will be useful,
qasimj@4634
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
qasimj@4634
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
qasimj@4634
    12
 * GNU General Public License for more details.
qasimj@4634
    13
 *
qasimj@4634
    14
 * You should have received a copy of the GNU General Public License
qasimj@4634
    15
 * along with this program; if not, write to the Free Software
qasimj@4634
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
qasimj@4634
    17
 * 
qasimj@4634
    18
 * Author: Qasim Javed <qasim@utdallas.edu>
qasimj@4634
    19
 */
qasimj@4634
    20
#include "ns3/log.h"
qasimj@4634
    21
#include "ns3/ipv4-header.h"
qasimj@4634
    22
#include "ns3/callback.h"
qasimj@4634
    23
#include "ns3/conntrack-tag.h"
qasimj@4634
    24
#include "ipv4-conntrack-l3-protocol.h"
qasimj@4634
    25
qasimj@4634
    26
NS_LOG_COMPONENT_DEFINE ("Ipv4ConntrackL3Protocol");
qasimj@4634
    27
qasimj@4634
    28
namespace ns3 {
qasimj@4634
    29
qasimj@4636
    30
Ipv4ConntrackL3Protocol::Ipv4ConntrackL3Protocol ()
qasimj@4634
    31
{
qasimj@4634
    32
}
qasimj@4634
    33
qasimj@4634
    34
uint32_t 
qasimj@4636
    35
Ipv4ConntrackL3Protocol::Ipv4Confirm (Hooks_t hookNumber, Ptr<Packet> packet, Ptr<NetDevice> in,
qasimj@4634
    36
                      Ptr<NetDevice> out, ContinueCallback& ccb)
qasimj@4634
    37
{
qasimj@4635
    38
  NS_LOG_DEBUG (":: Executing hook function Ipv4Confirm ::");
qasimj@4638
    39
  /*ConntrackTag ctinfo;
qasimj@4636
    40
  bool tagFound = packet->PeekPacketTag (ctinfo);
qasimj@4634
    41
qasimj@4636
    42
  if (!tagFound || ctinfo.GetConntrack () == IP_CT_RELATED + IP_CT_IS_REPLY)
qasimj@4635
    43
  {
qasimj@4635
    44
    NS_LOG_DEBUG ("Conntrack tag not found");
qasimj@4634
    45
    return 0;
qasimj@4638
    46
  }*/
qasimj@4634
    47
qasimj@4634
    48
  // Call conntrack helper here
qasimj@4634
    49
qasimj@4636
    50
  NS_ASSERT (!ccb.IsNull ());
qasimj@4635
    51
  // NetfilterConntrackConfirm
qasimj@4635
    52
  NS_LOG_DEBUG ("Invoking the ContinueCallback");
qasimj@4635
    53
  ccb (packet);
qasimj@4634
    54
qasimj@4634
    55
  return 0;
qasimj@4634
    56
}
qasimj@4634
    57
qasimj@4634
    58
uint32_t 
qasimj@4634
    59
Ipv4ConntrackL3Protocol::Ipv4ConntrackPreRoutingHook (Hooks_t hookNumber, Ptr<Packet> p, Ptr<NetDevice> in, Ptr<NetDevice> out, ContinueCallback& ccb)
qasimj@4634
    60
{
qasimj@4634
    61
  return 0;
qasimj@4634
    62
}
qasimj@4634
    63
qasimj@4634
    64
uint32_t 
qasimj@4634
    65
Ipv4ConntrackL3Protocol::Ipv4ConntrackInHook (Hooks_t hookNumber, Ptr<Packet> p, Ptr<NetDevice> in, Ptr<NetDevice> out, ContinueCallback& ccb)
qasimj@4634
    66
{
qasimj@4634
    67
  return 0;
qasimj@4634
    68
}
qasimj@4634
    69
qasimj@4634
    70
uint32_t 
qasimj@4634
    71
Ipv4ConntrackL3Protocol::Ipv4ConntrackOutHook (Hooks_t hookNumber, Ptr<Packet> p, Ptr<NetDevice> in, Ptr<NetDevice> out, ContinueCallback& ccb)
qasimj@4634
    72
{
qasimj@4634
    73
  return 0;
qasimj@4634
    74
}
qasimj@4634
    75
qasimj@4634
    76
uint32_t 
qasimj@4634
    77
Ipv4ConntrackL3Protocol::Ipv4ConntrackPostRoutingHook (Hooks_t hookNumber, Ptr<Packet> p, Ptr<NetDevice> in, Ptr<NetDevice> out, ContinueCallback& ccb)
qasimj@4634
    78
{
qasimj@4634
    79
  return 0;
qasimj@4634
    80
}
qasimj@4634
    81
qasimj@4634
    82
uint16_t 
qasimj@4636
    83
Ipv4ConntrackL3Protocol::RegisterPreRoutingHook ()
qasimj@4634
    84
{
qasimj@4634
    85
  return 0;
qasimj@4634
    86
}
qasimj@4634
    87
qasimj@4634
    88
uint16_t 
qasimj@4636
    89
Ipv4ConntrackL3Protocol::RegisterInHook ()
qasimj@4634
    90
{
qasimj@4634
    91
  return 0;
qasimj@4634
    92
}
qasimj@4634
    93
qasimj@4634
    94
uint16_t 
qasimj@4636
    95
Ipv4ConntrackL3Protocol::RegisterOutHook ()
qasimj@4634
    96
{
qasimj@4634
    97
  return 0;
qasimj@4634
    98
}
qasimj@4634
    99
qasimj@4634
   100
uint16_t 
qasimj@4636
   101
Ipv4ConntrackL3Protocol::RegisterPostRoutingHook ()
qasimj@4634
   102
{
qasimj@4634
   103
  return 0;
qasimj@4634
   104
}
qasimj@4634
   105
qasimj@4634
   106
bool 
qasimj@4634
   107
Ipv4ConntrackL3Protocol::PacketToTuple (Ptr<Packet> packet, NetfilterConntrackTuple& tuple)
qasimj@4634
   108
{
qasimj@4634
   109
  Ipv4Header ipHeader;
qasimj@4634
   110
qasimj@4636
   111
  packet->PeekHeader (ipHeader);
qasimj@4634
   112
qasimj@4636
   113
  tuple.SetSource (ipHeader.GetSource ());
qasimj@4636
   114
  tuple.SetDestination (ipHeader.GetDestination ());
qasimj@4634
   115
qasimj@4636
   116
  NS_LOG_DEBUG ("Ipv4 Packet To Tuple: " << "( " << tuple.GetSource () << "," << tuple.GetSourcePort () << "," << tuple.GetDestination () << "," << tuple.GetDestinationPort () << ")" );
qasimj@4634
   117
qasimj@4634
   118
  return true;
qasimj@4634
   119
}
qasimj@4634
   120
qasimj@4634
   121
bool 
qasimj@4634
   122
Ipv4ConntrackL3Protocol::InvertTuple (NetfilterConntrackTuple& inverse, NetfilterConntrackTuple& orig)
qasimj@4634
   123
{
qasimj@4636
   124
  inverse.SetSource (orig.GetDestination () );
qasimj@4636
   125
  inverse.SetDestination (orig.GetSource () );
qasimj@4634
   126
  return true;
qasimj@4634
   127
}
qasimj@4634
   128
qasimj@4634
   129
qasimj@4634
   130
qasimj@4634
   131
}