blob: fed972ca421b48f7c5c8102f28971af0209e5a85 [file] [log] [blame]
Alexander Afanasyev016a5d82013-07-15 10:41:29 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2013 University of California, Los Angeles
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
19 *
20 */
21
Alexander Afanasyev0c395372014-12-20 15:54:02 -080022#include "ndn-udp-face.hpp"
23#include "ns3/ndn-l3-protocol.hpp"
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070024
25#include "ns3/log.h"
26#include "ns3/packet.h"
27#include "ns3/node.h"
28#include "ns3/pointer.h"
Alexander Afanasyevd573af22013-07-27 12:57:08 -070029#include "ns3/udp-socket-factory.h"
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070030
Alexander Afanasyev0c395372014-12-20 15:54:02 -080031#include "ns3/ndn-name.hpp"
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070032
33using namespace std;
34
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080035NS_LOG_COMPONENT_DEFINE("ndn.UdpFace");
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070036
37namespace ns3 {
38namespace ndn {
39
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080040NS_OBJECT_ENSURE_REGISTERED(UdpFace);
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070041
42TypeId
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080043UdpFace::GetTypeId()
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070044{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080045 static TypeId tid = TypeId("ns3::ndn::UdpFace").SetParent<Face>().SetGroupName("Ndn");
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070046 return tid;
47}
48
49/**
50 * By default, Ndn face are created in the "down" state. Before
51 * becoming useable, the user must invoke SetUp on the face
52 */
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080053UdpFace::UdpFace(Ptr<Node> node, Ptr<Socket> socket, Ipv4Address address)
54 : Face(node)
55 , m_socket(socket)
56 , m_address(address)
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070057{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080058 SetMetric(1); // default metric
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070059}
60
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080061UdpFace::~UdpFace()
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070062{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080063 NS_LOG_FUNCTION_NOARGS();
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070064}
65
66UdpFace& UdpFace::operator= (const UdpFace &)
67{
68 return *this;
69}
70
Alexander Afanasyevd573af22013-07-27 12:57:08 -070071bool
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080072UdpFace::ReceiveFromUdp(Ptr<const Packet> p)
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070073{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080074 return Face::Receive(p);
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070075}
76
77bool
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080078UdpFace::Send(Ptr<Packet> packet)
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070079{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080080 if (!Face::Send(packet)) {
81 return false;
82 }
83
84 NS_LOG_FUNCTION(this << packet);
85 m_socket->Send(packet);
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070086
87 return true;
88}
89
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070090Ipv4Address
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080091UdpFace::GetAddress() const
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070092{
93 return m_address;
94}
95
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070096std::ostream&
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080097UdpFace::Print(std::ostream& os) const
Alexander Afanasyev016a5d82013-07-15 10:41:29 -070098{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080099 os << "dev=udp(" << GetId() << "," << GetAddress() << ")";
Alexander Afanasyev016a5d82013-07-15 10:41:29 -0700100 return os;
101}
102
103} // namespace ndn
104} // namespace ns3