|
|
| 53 |
|
53 |
|
| 54 |
BridgeNetDevice::BridgeNetDevice () |
54 |
BridgeNetDevice::BridgeNetDevice () |
| 55 |
: m_node (0), |
55 |
: m_node (0), |
| 56 |
m_name (""), |
|
|
| 57 |
m_ifIndex (0), |
56 |
m_ifIndex (0), |
| 58 |
m_mtu (0xffff) |
57 |
m_mtu (0xffff) |
| 59 |
{ |
58 |
{ |
|
|
| 121 |
uint16_t protocol, Mac48Address src, Mac48Address dst) |
120 |
uint16_t protocol, Mac48Address src, Mac48Address dst) |
| 122 |
{ |
121 |
{ |
| 123 |
NS_LOG_FUNCTION_NOARGS (); |
122 |
NS_LOG_FUNCTION_NOARGS (); |
| 124 |
NS_LOG_DEBUG ("LearningBridgeForward (incomingPort=" << incomingPort->GetName () |
123 |
NS_LOG_DEBUG ("LearningBridgeForward (incomingPort=" << incomingPort->GetInstanceTypeId ().GetName () |
| 125 |
<< ", packet=" << packet << ", protocol="<<protocol |
124 |
<< ", packet=" << packet << ", protocol="<<protocol |
| 126 |
<< ", src=" << src << ", dst=" << dst << ")"); |
125 |
<< ", src=" << src << ", dst=" << dst << ")"); |
| 127 |
|
126 |
|
|
|
| 129 |
Ptr<NetDevice> outPort = GetLearnedState (dst); |
128 |
Ptr<NetDevice> outPort = GetLearnedState (dst); |
| 130 |
if (outPort != NULL && outPort != incomingPort) |
129 |
if (outPort != NULL && outPort != incomingPort) |
| 131 |
{ |
130 |
{ |
| 132 |
NS_LOG_LOGIC ("Learning bridge state says to use port `" << outPort->GetName () << "'"); |
131 |
NS_LOG_LOGIC ("Learning bridge state says to use port `" << outPort->GetInstanceTypeId ().GetName () << "'"); |
| 133 |
outPort->SendFrom (packet->Copy (), src, dst, protocol); |
132 |
outPort->SendFrom (packet->Copy (), src, dst, protocol); |
| 134 |
} |
133 |
} |
| 135 |
else |
134 |
else |
|
|
| 141 |
Ptr<NetDevice> port = *iter; |
140 |
Ptr<NetDevice> port = *iter; |
| 142 |
if (port != incomingPort) |
141 |
if (port != incomingPort) |
| 143 |
{ |
142 |
{ |
| 144 |
NS_LOG_LOGIC ("LearningBridgeForward (" << src << " => " << dst << "): " << incomingPort->GetName () |
143 |
NS_LOG_LOGIC ("LearningBridgeForward (" << src << " => " << dst << "): " |
| 145 |
<< " --> " << port->GetName () |
144 |
<< incomingPort->GetInstanceTypeId ().GetName () |
|
|
145 |
<< " --> " << port->GetInstanceTypeId ().GetName () |
| 146 |
<< " (UID " << packet->GetUid () << ")."); |
146 |
<< " (UID " << packet->GetUid () << ")."); |
| 147 |
port->SendFrom (packet->Copy (), src, dst, protocol); |
147 |
port->SendFrom (packet->Copy (), src, dst, protocol); |
| 148 |
} |
148 |
} |
|
|
| 155 |
uint16_t protocol, Mac48Address src, Mac48Address dst) |
155 |
uint16_t protocol, Mac48Address src, Mac48Address dst) |
| 156 |
{ |
156 |
{ |
| 157 |
NS_LOG_FUNCTION_NOARGS (); |
157 |
NS_LOG_FUNCTION_NOARGS (); |
| 158 |
NS_LOG_DEBUG ("LearningBridgeForward (incomingPort=" << incomingPort->GetName () |
158 |
NS_LOG_DEBUG ("LearningBridgeForward (incomingPort=" << incomingPort->GetInstanceTypeId ().GetName () |
| 159 |
<< ", packet=" << packet << ", protocol="<<protocol |
159 |
<< ", packet=" << packet << ", protocol="<<protocol |
| 160 |
<< ", src=" << src << ", dst=" << dst << ")"); |
160 |
<< ", src=" << src << ", dst=" << dst << ")"); |
| 161 |
Learn (src, incomingPort); |
161 |
Learn (src, incomingPort); |
|
|
| 166 |
Ptr<NetDevice> port = *iter; |
166 |
Ptr<NetDevice> port = *iter; |
| 167 |
if (port != incomingPort) |
167 |
if (port != incomingPort) |
| 168 |
{ |
168 |
{ |
| 169 |
NS_LOG_LOGIC ("LearningBridgeForward (" << src << " => " << dst << "): " << incomingPort->GetName () |
169 |
NS_LOG_LOGIC ("LearningBridgeForward (" << src << " => " << dst << "): " |
| 170 |
<< " --> " << port->GetName () |
170 |
<< incomingPort->GetInstanceTypeId ().GetName () |
|
|
171 |
<< " --> " << port->GetInstanceTypeId ().GetName () |
| 171 |
<< " (UID " << packet->GetUid () << ")."); |
172 |
<< " (UID " << packet->GetUid () << ")."); |
| 172 |
port->SendFrom (packet->Copy (), src, dst, protocol); |
173 |
port->SendFrom (packet->Copy (), src, dst, protocol); |
| 173 |
} |
174 |
} |
|
|
| 242 |
m_address = Mac48Address::ConvertFrom (bridgePort->GetAddress ()); |
243 |
m_address = Mac48Address::ConvertFrom (bridgePort->GetAddress ()); |
| 243 |
} |
244 |
} |
| 244 |
|
245 |
|
| 245 |
NS_LOG_DEBUG ("RegisterProtocolHandler for " << bridgePort->GetName ()); |
246 |
NS_LOG_DEBUG ("RegisterProtocolHandler for " << bridgePort->GetInstanceTypeId ().GetName ()); |
| 246 |
m_node->RegisterProtocolHandler (MakeCallback (&BridgeNetDevice::ReceiveFromDevice, this), |
247 |
m_node->RegisterProtocolHandler (MakeCallback (&BridgeNetDevice::ReceiveFromDevice, this), |
| 247 |
0, bridgePort, true); |
248 |
0, bridgePort, true); |
| 248 |
m_ports.push_back (bridgePort); |
249 |
m_ports.push_back (bridgePort); |
|
|
| 250 |
} |
251 |
} |
| 251 |
|
252 |
|
| 252 |
void |
253 |
void |
| 253 |
BridgeNetDevice::SetName(const std::string name) |
|
|
| 254 |
{ |
| 255 |
NS_LOG_FUNCTION_NOARGS (); |
| 256 |
m_name = name; |
| 257 |
} |
| 258 |
|
| 259 |
std::string |
| 260 |
BridgeNetDevice::GetName(void) const |
| 261 |
{ |
| 262 |
NS_LOG_FUNCTION_NOARGS (); |
| 263 |
return m_name; |
| 264 |
} |
| 265 |
|
| 266 |
void |
| 267 |
BridgeNetDevice::SetIfIndex(const uint32_t index) |
254 |
BridgeNetDevice::SetIfIndex(const uint32_t index) |
| 268 |
{ |
255 |
{ |
| 269 |
NS_LOG_FUNCTION_NOARGS (); |
256 |
NS_LOG_FUNCTION_NOARGS (); |