OLD | NEW |
(Empty) | |
| 1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
| 2 /* |
| 3 * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II |
| 4 * 2016 University of Washington |
| 5 * |
| 6 * This program is free software; you can redistribute it and/or modify |
| 7 * it under the terms of the GNU General Public License version 2 as |
| 8 * published by the Free Software Foundation; |
| 9 * |
| 10 * This program is distributed in the hope that it will be useful, |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 * GNU General Public License for more details. |
| 14 * |
| 15 * You should have received a copy of the GNU General Public License |
| 16 * along with this program; if not, write to the Free Software |
| 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 18 * |
| 19 * Authors: Stefano Avallone <stavallo@unina.it> |
| 20 * Tom Henderson <tomhend@u.washington.edu> |
| 21 */ |
| 22 |
| 23 #include "ns3/log.h" |
| 24 #include "ns3/enum.h" |
| 25 #include "ipv6-queue-disc-item.h" |
| 26 #include "ipv6-packet-filter.h" |
| 27 |
| 28 namespace ns3 { |
| 29 |
| 30 NS_LOG_COMPONENT_DEFINE ("Ipv6PacketFilter"); |
| 31 |
| 32 NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketFilter); |
| 33 |
| 34 TypeId· |
| 35 Ipv6PacketFilter::GetTypeId (void) |
| 36 { |
| 37 static TypeId tid = TypeId ("ns3::Ipv6PacketFilter") |
| 38 .SetParent<PacketFilter> () |
| 39 .SetGroupName ("Internet") |
| 40 ; |
| 41 return tid; |
| 42 } |
| 43 |
| 44 Ipv6PacketFilter::Ipv6PacketFilter () |
| 45 { |
| 46 NS_LOG_FUNCTION (this); |
| 47 } |
| 48 |
| 49 Ipv6PacketFilter::~Ipv6PacketFilter() |
| 50 { |
| 51 NS_LOG_FUNCTION (this); |
| 52 } |
| 53 |
| 54 bool |
| 55 Ipv6PacketFilter::CheckProtocol (Ptr<QueueDiscItem> item) const |
| 56 { |
| 57 NS_LOG_FUNCTION (this << item); |
| 58 return (DynamicCast<Ipv6QueueDiscItem> (item) != 0); |
| 59 } |
| 60 |
| 61 // ------------------------------------------------------------------------- // |
| 62 |
| 63 NS_OBJECT_ENSURE_REGISTERED (PfifoFastIpv6PacketFilter); |
| 64 |
| 65 TypeId· |
| 66 PfifoFastIpv6PacketFilter::GetTypeId (void) |
| 67 { |
| 68 static TypeId tid = TypeId ("ns3::PfifoFastIpv6PacketFilter") |
| 69 .SetParent<Ipv6PacketFilter> () |
| 70 .SetGroupName ("Internet") |
| 71 .AddConstructor<PfifoFastIpv6PacketFilter> () |
| 72 ; |
| 73 return tid; |
| 74 } |
| 75 |
| 76 PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter () |
| 77 { |
| 78 NS_LOG_FUNCTION (this); |
| 79 } |
| 80 |
| 81 PfifoFastIpv6PacketFilter::~PfifoFastIpv6PacketFilter() |
| 82 { |
| 83 NS_LOG_FUNCTION (this); |
| 84 } |
| 85 |
| 86 int32_t |
| 87 PfifoFastIpv6PacketFilter::DoClassify (Ptr<QueueDiscItem> item) const |
| 88 { |
| 89 NS_LOG_FUNCTION (this << item); |
| 90 uint32_t band; |
| 91 Ptr<Ipv6QueueDiscItem> ipv6Item = DynamicCast<Ipv6QueueDiscItem> (item); |
| 92 |
| 93 NS_ASSERT (ipv6Item != 0); |
| 94 |
| 95 Ipv6Header::DscpType dscp = ipv6Item->GetHeader ().GetDscp (); |
| 96 band = DscpToBand (dscp); |
| 97 NS_LOG_DEBUG ("Found Ipv6 packet; DSCP " << ipv6Item->GetHeader ().DscpTypeToS
tring (dscp) << " band " << band); |
| 98 |
| 99 return band; |
| 100 } |
| 101 |
| 102 uint32_t |
| 103 PfifoFastIpv6PacketFilter::DscpToBand (Ipv6Header::DscpType dscpType) const |
| 104 { |
| 105 NS_LOG_FUNCTION (this); |
| 106 |
| 107 uint32_t band = 1; |
| 108 switch (dscpType) { |
| 109 case Ipv6Header::DSCP_EF : |
| 110 case Ipv6Header::DSCP_AF13 : |
| 111 case Ipv6Header::DSCP_AF23 : |
| 112 case Ipv6Header::DSCP_AF33 : |
| 113 case Ipv6Header::DSCP_AF43 : |
| 114 case Ipv6Header::DscpDefault : |
| 115 case Ipv6Header::DSCP_CS2 : |
| 116 case Ipv6Header::DSCP_CS3 : |
| 117 band = 1; |
| 118 break; |
| 119 case Ipv6Header::DSCP_AF11 : |
| 120 case Ipv6Header::DSCP_AF21 : |
| 121 case Ipv6Header::DSCP_AF31 : |
| 122 case Ipv6Header::DSCP_AF41 : |
| 123 case Ipv6Header::DSCP_CS1 : |
| 124 band = 2; |
| 125 break; |
| 126 case Ipv6Header::DSCP_AF12 : |
| 127 case Ipv6Header::DSCP_AF22 : |
| 128 case Ipv6Header::DSCP_AF32 : |
| 129 case Ipv6Header::DSCP_AF42 : |
| 130 case Ipv6Header::DSCP_CS4 : |
| 131 case Ipv6Header::DSCP_CS5 : |
| 132 case Ipv6Header::DSCP_CS6 : |
| 133 case Ipv6Header::DSCP_CS7 : |
| 134 band = 0; |
| 135 break; |
| 136 default : |
| 137 band = 1; |
| 138 } |
| 139 NS_LOG_DEBUG ("Band returned: " << band); |
| 140 return band; |
| 141 } |
| 142 |
| 143 } // namespace ns3 |
OLD | NEW |