COFPSwitchConfig::COFPSwitchConfig(ACE_CDR::Octet abType, ACE_CDR::Octet abVersion, ACE_UINT16 awFlags, ACE_UINT16 awMissSendLen) : COFPMessage(abType, abVersion, 0, GetStreamLen()) , m_wFlags(awFlags) , m_wMissSendLen(awMissSendLen) { // omitting OFP10 type checking, as their values are the same as OFP13 CM_ASSERT_RETURN_VOID((OFP13::OFPT_SET_CONFIG == abType) || (OFP13::OFPT_GET_CONFIG_REPLY == abType)); }
TVec<uint64> TSsParserMP::GetStartPosV(uint64 Lb, uint64 Ub) const { TVec<uint64> Ret; if (Lb >= GetStreamLen()) { return Ret; } while (Lb < Ub) { // Find line corresponding to Lb uint64 StartPos = FInPt->GetLineStartPos(Lb); uint64 EndPos = FInPt->GetLineEndPos(Lb); // If line ends in given range, add to count if (Lb <= EndPos && EndPos < Ub) { Ret.Add(StartPos); } // Start at next line Lb = EndPos + 1; } return Ret; }
CmResult COFP13PacketOutMsg::StreamTo(ACE_OutputCDR &os) { CmResult lRet = CM_ERROR_FAILURE; ACE_CDR::Octet pad[6]; lRet = COFPMessage::StreamTo(os); if (CM_FAILED(lRet)) { ACE_ERROR((LM_ERROR, ACE_TEXT("COFP13PacketOutMsg::StreamTo, COFPMessage::StreamTo fail\n"))); return lRet; } ACE_DEBUG((LM_DEBUG, ACE_TEXT("COFP13PacketOutMsg::StreamTo():\n"))); ACE_DEBUG((LM_DEBUG, ACE_TEXT("msgLen=%u\n"), GetMessageLength())); os<<m_buffer_id; os<<m_in_port; os<<m_actions_len; os.write_octet_array(pad, sizeof(pad)); bool bGood = os.good_bit(); CM_ASSERT_RETURN(bGood, CM_ERROR_FAILURE); ACE_DEBUG((LM_DEBUG, ACE_TEXT("m_actions_len=%u\n"), m_actions_len)); #if 0 while(!m_action_list.empty()) { CCmComAutoPtr<COpenFlowProtAction> action; action = m_action_list.front(); m_action_list.pop_front(); action->EncodeAction(os); } #endif ACE_UINT16 i = 0; std::list<COFP13Action *>::const_iterator it = m_action_list.begin(); while(it != m_action_list.end()) { lRet = (*it)->StreamTo(os); CM_ASSERT_RETURN(CM_SUCCEEDED(lRet), CM_ERROR_FAILURE); ACE_DEBUG((LM_DEBUG, ACE_TEXT("action[%u]'s length=%u\n"), i++, (*it)->GetActionLen())); bGood = os.good_bit(); CM_ASSERT_RETURN(bGood, CM_ERROR_FAILURE); it++; } // just for debugging ACE_UINT32 length = sizeof(m_buffer_id)+sizeof(m_in_port)+sizeof(m_actions_len)+sizeof(m_pad); ACE_DEBUG((LM_DEBUG, ACE_TEXT("length=%u\n"), length)); ACE_INT32 dataLen = GetStreamLen()-COFPMessage::GetStreamLen()-length-m_actions_len; ACE_DEBUG((LM_DEBUG, ACE_TEXT("dataLen=%d\n"), dataLen)); if (m_PacketData) { ACE_DEBUG((LM_DEBUG, ACE_TEXT("m_PacketData->total_length() = %u\n"), m_PacketData->total_length())); std::string str = m_PacketData->flatten_chained(); bGood = os.write_char_array(str.c_str(), str.length()); CM_ASSERT_RETURN(bGood, CM_ERROR_FAILURE); } return CM_OK; }
CmResult COFP13PacketOutMsg::StreamFrom(ACE_InputCDR &is) { ACE_INT32 remainActLen = 0; ACE_INT32 packet_length = 0; ACE_CDR::Octet pad[6]; CmResult lRet = CM_ERROR_FAILURE; lRet = COFPMessage::StreamFrom(is); if (CM_FAILED(lRet)) { ACE_ERROR((LM_ERROR, ACE_TEXT("COFP13PacketOutMsg::StreamFrom(), COFPMessage::StreamFrom fail\n"))); return lRet; } ACE_DEBUG((LM_DEBUG, ACE_TEXT("COFP13PacketOutMsg::StreamFrom(): \n"))); is>>m_buffer_id; is>>m_in_port; is>>m_actions_len; is.read_octet_array(pad, sizeof(pad)); bool bGood = is.good_bit(); CM_ASSERT_RETURN(bGood, CM_ERROR_FAILURE); ACE_DEBUG((LM_DEBUG, ACE_TEXT("m_actions_len=%u\n"), m_actions_len)); if (m_actions_len>0) { remainActLen = m_actions_len; ACE_UINT16 i = 0; while (remainActLen > 0) { COFP13Action *action = nullptr; CmResult result = COFP13Action::DecodeAction(is, action); if (CM_SUCCEEDED(result)) { m_action_list.push_back(action); ACE_DEBUG((LM_DEBUG, ACE_TEXT("action[%u], len=%u\n"), i++, action->GetStreamLen())); remainActLen = remainActLen - (action->GetStreamLen()); } else { ACE_ERROR((LM_ERROR, ACE_TEXT("COFP13Action::DecodeAction failed.\n"))); return CM_ERROR_FAILURE; } } } ACE_UINT32 length = sizeof(m_buffer_id)+sizeof(m_in_port)+sizeof(m_actions_len)+sizeof(m_pad); ACE_DEBUG((LM_DEBUG, ACE_TEXT("length=%u\n"), length)); packet_length = m_wLength-COFPMessage::GetStreamLen()-length-m_actions_len; ACE_DEBUG((LM_DEBUG, ACE_TEXT("packet_length=%d, GetStreamLen=%u\n"), packet_length, GetStreamLen())); if (packet_length < 0) { ACE_ERROR((LM_ERROR, ACE_TEXT("COFP13PacketOutMsg::StreamFrom, error, length=%u, actionlength=%u\n"), length, m_actions_len)); return CM_ERROR_FAILURE; } ACE_Message_Block data(packet_length); ACE_DEBUG((LM_DEBUG, ACE_TEXT("COFP13PacketOutMsg::StreamFrom, wr_ptr=%p, space=%u\n"), data.wr_ptr(), data.space())); bGood = is.read_char_array(data.wr_ptr(), packet_length); CM_ASSERT_RETURN(bGood, CM_ERROR_FAILURE); data.wr_ptr((size_t)packet_length); if (m_PacketData) { m_PacketData->append(data.duplicate()); } else { m_PacketData = data.duplicate(); } return CM_OK; }