EPONImplementationforOMNet++  0.8Beta
EPON_ONU_vlanBridgeRelay Class Reference

TODO - Generated class. More...

#include <EPON_ONU_vlanBridgeRelay.h>

Inheritance diagram for EPON_ONU_vlanBridgeRelay:
EPON_ONU_relayDefault

List of all members.

Protected Member Functions

virtual void initialize ()
virtual void handleFromLAN (EtherFrame *frame)
virtual uint16_t findLLiDForVlan (uint16_t vlan)

Detailed Description

TODO - Generated class.


Member Function Documentation

uint16_t EPON_ONU_vlanBridgeRelay::findLLiDForVlan ( uint16_t  vlan) [protected, virtual]
                                                               {
      if (!serviceList) return LLID_EPON_BC;

      int index=-1;
      for (uint8_t i=0; i<serviceList->size(); i++){
            if (serviceList->at(i).vlan == vlan){
                  index=i;
                  break;
            }
      }

      if (index !=-1 && index<(int)llids.size())
            return llids[index];

      return LLID_EPON_BC;
}
void EPON_ONU_vlanBridgeRelay::handleFromLAN ( EtherFrame *  frame) [protected, virtual]

Reimplemented from EPON_ONU_relayDefault.

                                                             {
      updateTableFromFrame(frame);

      mac_llid ml;

      ml.mac = frame->getDest();
      // Check table ... if port is the same as incoming drop
      std::string port = getPortForAddress(ml);
      if (port == "ethOut") {
            delete frame;
            return;
      }

      // Get the vlan info
      uint16_t vlan=0;
      EthernetDot1QFrame * frame_d1q = dynamic_cast<EthernetDot1QFrame *>(frame);
      if (frame_d1q) vlan = frame_d1q->getVlanID();


      /*
       *  NOTE: The following code works... but is logically wrong.
       *  It is bases on the EtherSwitch code... but we don't have
       *  multiple Ethernet (copper) interfaces yet (Increases complexity)
       *
       *  On extended versions you could only bridge vlan <-> llid.
       *  (vlan zero (0) -> BC)
       */

      // No vlan -> Default
      if (vlan == 0){
            EV << "ONU_vlan Relay: No vlan info"<<endl;
      }else{
            uint16_t llid_tmp = findLLiDForVlan(vlan);
            EV << "ONU_vlan Relay: Vlan info found, ID: "<<(int)llid_tmp<<endl;
            if (llid_tmp == 0 ) llid_tmp = LLID_EPON_BC;
            frame->setControlInfo(new EPON_LLidCtrlInfo(llid_tmp) );
      }

      send(frame, "toPONout");
      return;

}
void EPON_ONU_vlanBridgeRelay::initialize ( ) [protected, virtual]

The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Friends Defines