Hello all
i try to do something like this
auto eth2FramePacket = new Packet("Packet");
MacAddress sourceMac; //old -> MACAddress sourceMac;
MacAddress destMac; //old -> MACAddress destMac ;
for (int i=0;i<6;i++) tmp_dst[i]=(unsigned char)Rcvpacket->data[i];
for (int i=0;i<6;i++) tmp_src[i]=(unsigned char)Rcvpacket->data[i+6];
tmp_ethertype = (int) ((Rcvpacket->data[12] << 8) + (Rcvpacket->data[13] & 0xFF) );//-1000000; // 12-13 bits are ethertype bits
sourceMac.setAddressBytes(tmp_src);
destMac.setAddressBytes(tmp_dst);
rame->setSrc(sourceMac);
auto ethMacHeader = makeShared<EthernetMacHeader>();
ethMacHeader->setSrc(sourceMac);
ethMacHeader->setDest(destMac);
ethMacHeader->setTypeOrLength(tmp_ethertype);
eth2FramePacket->insertAtFront(ethMacHeader);
myPacket *tmp_packet= new myPacket("tmp_packet");
unsigned int tmp_packet_length=(unsigned int) (Rcvpacket->length-14);
tmp_packet->setLength(tmp_packet_length); //only the payload after striping dst, src, ethertype
total_bytes_sent=total_bytes_sent+tmp_packet_length;
for (unsigned int i=0;i<tmp_packet_length;i++) tmp_payload[i]= (uint8_t)Rcvpacket->data[i+14];
if (L2_Routing) {
eth2FramePacket->encapsulate(tmp_packet); // tmp_packet -> myPacket_m.h extend with cPacket
send_packet=true;
EV<< " // --------------- Ethernet (L2) Routing ---------------"<< endl;
}
if (send_packet){
send(eth2FramePacket,"gate$o");
}
else { //------- Receive real message from OMNET++ network (other OMNET++ node) -------
bubble("-----just got a real message from OMNET++ network------");
TOGGLE=!TOGGLE;
//EV<< "//------- Receive real message from OMNET++ network (other OMNET++ node " << endl;
//EtherTraffic *msgTraffic = check_and_cast<EtherTraffic *>(msg);
//EtherPhyFrame * etherPhyReceived = dynamic_cast<EtherPhyFrame *>(msgTraffic);
//cPacket *frame_cPacket = etherPhyReceived->decapsulate();
//EtherFrame *frame_received = check_and_cast<EtherFrame *>(frame_cPacket);
//EtherFrame *eth2Frame2 = nullptr;
auto eth2Frame2 = new Packet();
if (dynamic_cast<EthernetMacHeader*>(msg) != nullptr){
EV<< "EthernetMacHeader"<< endl;
cout<<"\n EthernetIIFrame taken";
inet::EthernetMacHeader *eth2Frame = new EthernetMacHeader();
eth2Frame = (EthernetMacHeader*)(msg);
ethertype=eth2Frame->getTypeOrLength();
eth2Frame2=(Packet*)eth2Frame;
ethertype_dec[0]=(uint8_t) ((ethertype >> 8) & 0xFF);
ethertype_dec[1]=(uint8_t)(ethertype & 0xFF);
}
else if(dynamic_cast<Ieee8022LlcSnapHeader*>(msg) != nullptr){
EV<< "Ieee8022LlcSnapHeader"<< endl;
cout<<"\n EtherFrameWithSNAP taken";
Ieee8022LlcSnapHeader *snapFrame = new Ieee8022LlcSnapHeader();
snapFrame =(Ieee8022LlcSnapHeader*)(msg);
snap_local_code=snapFrame->getProtocolId();
eth2Frame2=(Packet*)snapFrame;
}
/* need to be fixed
auto macHeader = eth2Frame2->popAtFront<MacHeader>();
MacAddress sourceMac = macHeader->getSrc(); unsigned char tmp_src[6];
MacAddress destMac = macHeader->getDest(); unsigned char tmp_dst[6];
sourceMac.getAddressBytes(tmp_src);
destMac.getAddressBytes(tmp_dst);
*/
myPacket *from_eth_packet_pt;
unsigned int from_eth_payload_length;
// --------------- Ethernet (L2) Routing ---------------
if (L2_Routing) {
from_eth_packet_pt= (myPacket*) (eth2Frame2->decapsulate());
from_eth_payload_length=from_eth_packet_pt->getLength();
getPayloadArray(from_eth_packet_pt,from_eth_payload,from_eth_payload_length);
}