src/routing/click/ipv4-click-routing.h
author Lalith Suresh
Fri, 28 May 2010 14:40:42 +0530
changeset 6288 9056138c8223
parent 6287 4c38b94a4aaa
child 6289 e3f16dd7456b
permissions -rw-r--r--
Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6283
Lalith Suresh
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
Lalith Suresh
parents:
diff changeset
     2
/*
Lalith Suresh
parents:
diff changeset
     3
 * Copyright (c) 2010 Lalith Suresh 
Lalith Suresh
parents:
diff changeset
     4
 *
Lalith Suresh
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
Lalith Suresh
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
Lalith Suresh
parents:
diff changeset
     7
 * published by the Free Software Foundation;
Lalith Suresh
parents:
diff changeset
     8
 *
Lalith Suresh
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
Lalith Suresh
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Lalith Suresh
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Lalith Suresh
parents:
diff changeset
    12
 * GNU General Public License for more details.
Lalith Suresh
parents:
diff changeset
    13
 *
Lalith Suresh
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
Lalith Suresh
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
Lalith Suresh
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Lalith Suresh
parents:
diff changeset
    17
 *
Lalith Suresh
parents:
diff changeset
    18
 * Authors: Lalith Suresh <suresh.lalith@gmail.com>
Lalith Suresh
parents:
diff changeset
    19
 */
Lalith Suresh
parents:
diff changeset
    20
Lalith Suresh
parents:
diff changeset
    21
#ifndef __IPV4_CLICK_ROUTING_H__
Lalith Suresh
parents:
diff changeset
    22
#define __IPV4_CLICK_ROUTING_H__
Lalith Suresh
parents:
diff changeset
    23
Lalith Suresh
parents:
diff changeset
    24
#include "ns3/object.h"
Lalith Suresh
parents:
diff changeset
    25
#include "ns3/packet.h"
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    26
#include "ns3/ipv4.h"
6283
Lalith Suresh
parents:
diff changeset
    27
#include "ipv4-external-routing.h"
6285
38baafaa898c Test code to initialise Click Router instance
Lalith Suresh
parents: 6283
diff changeset
    28
38baafaa898c Test code to initialise Click Router instance
Lalith Suresh
parents: 6283
diff changeset
    29
#include <sys/time.h>
6283
Lalith Suresh
parents:
diff changeset
    30
#include <sys/types.h>
Lalith Suresh
parents:
diff changeset
    31
#include <click/simclick.h>
Lalith Suresh
parents:
diff changeset
    32
Lalith Suresh
parents:
diff changeset
    33
#include <map>
Lalith Suresh
parents:
diff changeset
    34
#include <string>
Lalith Suresh
parents:
diff changeset
    35
Lalith Suresh
parents:
diff changeset
    36
namespace ns3 {
Lalith Suresh
parents:
diff changeset
    37
Lalith Suresh
parents:
diff changeset
    38
class Ipv4ClickRouting : public Ipv4ExternalRouting
Lalith Suresh
parents:
diff changeset
    39
{
Lalith Suresh
parents:
diff changeset
    40
public:
6288
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    41
6283
Lalith Suresh
parents:
diff changeset
    42
  Ipv4ClickRouting ();
Lalith Suresh
parents:
diff changeset
    43
  virtual ~Ipv4ClickRouting ();
Lalith Suresh
parents:
diff changeset
    44
Lalith Suresh
parents:
diff changeset
    45
  virtual void DoStart ();
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    46
  virtual void DoDispose ();
6288
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    47
  void SetClickFile (const char *clickfile);
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    48
  void SetNodeName (std::string name);
6283
Lalith Suresh
parents:
diff changeset
    49
Lalith Suresh
parents:
diff changeset
    50
private:
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    51
  // Allow Click Service methods to choose appropriate Ipv4ClickRouting object
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    52
  static std::map < simclick_node_t *, Ptr<Ipv4ClickRouting> > m_clickInstanceFromSimNode;
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    53
6288
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    54
  const char *m_clickFile;
6283
Lalith Suresh
parents:
diff changeset
    55
  std::string m_nodeName;
6287
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    56
6288
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    57
  simclick_node_t *m_simNode;
6287
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    58
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    59
  std::map < std::string, uint32_t > m_ifaceIdFromName;
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    60
  std::map < std::string, Address > m_ifaceMacFromName;
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    61
  std::map < std::string, Ipv4Address > m_ifaceAddrFromName;
6283
Lalith Suresh
parents:
diff changeset
    62
  bool m_clickInitialised;
Lalith Suresh
parents:
diff changeset
    63
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    64
  Ptr<Ipv4> m_ipv4;
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    65
6283
Lalith Suresh
parents:
diff changeset
    66
public:
6288
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    67
  int GetInterfaceId (const char *ifname);
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    68
  std::string GetIpAddrFromIfid (int ifid);
9056138c8223 Ipv4ClickRouting ready for aggregation with an actual node. nsclick-test.cc improved.
Lalith Suresh
parents: 6287
diff changeset
    69
  std::string GetMacAddrFromIfid (int ifid);
6283
Lalith Suresh
parents:
diff changeset
    70
  std::string GetNodeName ();
Lalith Suresh
parents:
diff changeset
    71
  int IfReady (int ifid);
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    72
  virtual void ReceiveFromExtRouter (Ptr<Packet> p, bool direction);
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    73
  virtual void SendToExtRouter (Ptr<Packet> p, bool direction);
6285
38baafaa898c Test code to initialise Click Router instance
Lalith Suresh
parents: 6283
diff changeset
    74
  virtual void SetIpv4 (Ptr<Ipv4> ipv4);
38baafaa898c Test code to initialise Click Router instance
Lalith Suresh
parents: 6283
diff changeset
    75
  void TestInit ();
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    76
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    77
  static Ptr<Ipv4ClickRouting> GetClickInstanceFromSimNode (simclick_node_t *simnode);
6287
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    78
  void AddSimNodeToClickMapping ();
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    79
  void HandleScheduleFromClick (const struct timeval *when);
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    80
  void HandlePacketFromClick (int ifid, int type, const unsigned char *data, int len);
4c38b94a4aaa Test code to send packets to and from Click for 10 seconds
Lalith Suresh
parents: 6286
diff changeset
    81
  void SendPacketToClick (int ifid, int type, const unsigned char *data, int len);
6283
Lalith Suresh
parents:
diff changeset
    82
};
Lalith Suresh
parents:
diff changeset
    83
6286
bc914b89ab89 Tested simclick_click_send and added methods to Ipv4ClickRouting
Lalith Suresh
parents: 6285
diff changeset
    84
} // namespace ns3
6283
Lalith Suresh
parents:
diff changeset
    85
Lalith Suresh
parents:
diff changeset
    86
#endif // __IPV4_CLICK_ROUTING_H__