OMNET VERTICAL HANDOVER PROJECTS use different radio access technologies (RAT).When the two cells use different (RAT) or if they belong to different operators, the process is called vertical handover (VHO).

Phases of vertical handover:
Generally three different phases are involve in vertical handover process. There are,
- Handover information gathering
- Network selection decision
- Handover execution
Different criteria considered during VHO:
- Received signal strength
- Bandwidth
- User’s perceive quality of service
- Error rate
- Throughput
- Battery state
- Cost
- User preference for a certain radio access technology etc.
Sample Program using Omnet++ Vertical Handover projects.
void HandoverRadio::handleLowerMsgStart(AirFrame* airframe) { const Coord& framePos = airframe->getSenderPos(); double distance = getRadioPosition().distance(framePos); double frequency = carrierFrequency; if (airframe && airframe->getCarrierFrequency()>0.0) frequency = airframe->getCarrierFrequency(); if (distance<MIN_DISTANCE) distance = MIN_DISTANCE; double rcvdPower = receptionModel->calculateReceivedPower(airframe->getPSend(), frequency, distance); if (obstacles && distance > MIN_DISTANCE) rcvdPower = obstacles->calculateReceivedPower(rcvdPower, carrierFrequency, framePos, 0, getRadioPosition(), 0); airframe->setPowRec(rcvdPower); f recvBuff[airframe] = rcvdPower; updateSensitivity(airframe->getBitrate()); if (airframe->getArrivalTime() == simTime() && rcvdPower >= sensitivity && rs.getState() != RadioState::TRANSMIT && snrInfo.ptr == NULL) { SnrList snrList; snrInfo.ptr = airframe; snrInfo.rcvdPower = rcvdPower; snrInfo.sList = snrList; addNewSnr(); if (rs.getState() != RadioState::RECV) { setRadioState(RadioState::RECV); } } else { noiseLevel += rcvdPower; if (snrInfo.ptr != NULL) { // update snr info for currently being received message EV << "adding new snr value to snr list of message being received\n"; addNewSnr(); } if (BASE_NOISE_LEVEL >= receptionThreshold && rs.getState() == RadioState::IDLE) { EV << "setting radio state to RECV\n"; setRadioState(RadioState::RECV); } } }