Untitled
unknown
plain_text
a year ago
1.7 kB
15
Indexable
#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>
class EthernetSwitch {
private:
std::unordered_map<std::string, int> macTable; // MAC address to port mapping
int numPorts;
public:
EthernetSwitch(int ports) : numPorts(ports) {}
void learn(const std::string& macAddress, int port) {
macTable[macAddress] = port;
std::cout << "Learned MAC: " << macAddress << " on port: " << port << std::endl;
}
void forward(const std::string& srcMac, const std::string& destMac) {
learn(srcMac, 1); // Assume source MAC is always on port 1 for simplicity
if (macTable.find(destMac) != macTable.end()) {
int destPort = macTable[destMac];
std::cout << "Forwarding packet from " << srcMac << " to " << destMac << " on port: " << destPort << std::endl;
} else {
std::cout << "Destination MAC: " << destMac << " not found. Flooding to all ports except port 1." << std::endl;
for (int i = 1; i <= numPorts; ++i) {
if (i != 1) {
std::cout << "Flooding to port: " << i << std::endl;
}
}
}
}
};
int main() {
EthernetSwitch mySwitch(5); // Create a switch with 5 ports
// Simulate learning MAC addresses
mySwitch.learn("00:11:22:33:44:55", 1);
mySwitch.learn("66:77:88:99:AA:BB", 2);
mySwitch.learn("CC:DD:EE:FF:00:11", 3);
// Simulate forwarding packets
mySwitch.forward("00:11:22:33:44:55", "66:77:88:99:AA:BB"); // Should forward to port 2
mySwitch.forward("00:11:22:33:44:55", "AA:BB:CC:DD:EE:FF"); // Should flood
return 0;
}Editor is loading...
Leave a Comment