OPNET WiMAX 모델에서 사용하는 MAC connection의 종류는 다음과 같이 구분해 볼 수 있다(분류와 명칭은 필자의 생각에 의한 것이다). 이중에서 Service flow connection과 Control connection은 사용자의 설정에 의해서 생성되며, 다른 connection들은 사용자의 설정과는 상관없이 자동적으로 생성된다.
- Default flow connection
- Service flow connection
- Control connection
- Broadcast connection
- Initial ranging connection
Default flow connection은 사용자가 Service flow connection을 정의하지 않았거나, 패킷의 특징과 일치하는 Service flow connection이 없을 경우에 패킷을 전달하기 위해서 사용된다. DL/UL 구간에 각각 한개씩 생성되며, BE 타입의 스케줄러가 적용된다.
Service flow connection은 사용자 설정에 의해서 생성되며, 역시 사용자가 정의해준 Classifier 규칙에 맞는 패킷들을 전달하는데 사용된다.
Control connection은 제어/관리 메시지를 전달하기 위해서 사용되는 것으로, Basic connection과 Primary management connection 두 가지 종류가 있다.
Broadcast connection은 브로드캐스트 메시지를 전달하기 위한 것인데, DL 구간과 UL 구간 connection의 설정 과정이 서로 다르다. UL broadcast connection은 DSA 메시지 교환에 의해서 설정되지만, DL broadcast connection은 별도의 DSA 메시지 교환과정없이 내부적으로 설정된다.
Initial ranging connection은 BS와 SS에서 ranging 처리과정동안 사용되는 것으로 initial ranging이 끝나면 periodic ranging에서도 사용된다.
Posted by 신상헌
,

OPNET WiMAX 모델에도 많은 수의 매크로가 사용되고 있지만, global_efficiency_on은 소스 코드를 분석할 때 자주 만나게 되는 특히 중요한 매크로이다. 왜냐하면, WiMAX MAC에서 패킷을 PHY로 내려보내고자 할 때 다음과 같이 global_efficiency_on 값이 참인지 아닌지에 따라서 처리하는 과정이 양분되는 경우가 많기 때문이다.

if(global_efficiency_on)
  {
  ...
  }
else
  {
  ...
  }

global_efficiency_on 매크로는 wimax_support.h 파일에 다음과 같이 선언되어 있다.
#define global_efficiency_on  (global_efficiency_level == WIMAXC_EFFICIENCY_ENABLED)

global_efficiency_level 변수는 wimax_support.ex.c 파일에 정의되어 있는 int 타입의 전역변수로서, WiMAX_Config 노드의 "Efficiency Mode"에 설정된 값을 반영한다. "Efficiency Mode"에는 "Efficiency Enabled", "Framing Module Enabled", "Physical Layer Enabled", "Mobility and Ranging Enabled" 4가지 모드가 설정 가능한데, global_efficiency_on 매크로가 참이 되는 경우는 "Efficiency Mode" 속성이 "Efficiency Enabled"로 설정되었을 때이다. 즉, OPNET WiMAX MAC의 세부적인 동작은 DL/UL 프레임을 반영할 때와 반영하지 않을 때로 구분되는 경우가 많은 것이다.
앞으로의 OPNET WiMAX 모델 분석은 "Efficiency Mode" 속성의 설정이 "Mobility and Ranging Enabled"인 경우를
기준으로 한다. 다시 말해서, 별도의 설명이 없으면 global_efficiency_on 매크로의 값이 거짓인 경우에 대해서 분석한 것이다.

Posted by 신상헌
,
oms_mux_demux_mac_interface 프로세스 모델은 3섹터 BS 노드에서 3개의 WiMAX MAC을 하나의 IP 모듈에 연결시키기위하여 사용된다. 엄밀히 얘기하자면, oms_mux_demux_mac_interface 프로세스 모델은 WiMAX 모델만을 위한 것은 아니다. 하지만, WiMAX 모델을 개발하는 과정에서 같이 개발된 것으로 생각되며, WiMAX 이외의 다른
곳에서 사용되는 것은 아직 보지못했다.


프로세스 모델의 구조는 상당히 간단하다. 상위 계층으로부터 패킷이 도락하면 appl layer arrival 스테이트로 천이하며, 패킷의 최종 목적지 노드가 위치한 섹터를 담당하는 WiMAX MAC으로 패킷을 전달한다. 만약 브로드캐스트 패킷이면, 패킷을 복사하여 3개의 WiMAX MAC으로 모두 전달한다.
하위 계층으로부터 패킷이 도착하면 mac layer arrival 스테이트로 천이하며, 상위 계층으로 패킷을 전달한다.
MAC_MUX_DEMUX_CMD 이벤트는 wimax_bs_control 프로세스에서 보내는 remote interrupt에 의해서 발생된다.
wimax_bs_control 프로세스는 자신이 담당하는 섹터에 새로운 MS가 들어오거나 나갈 때, 이를 oms_mux_demux_mac_interface 프로세스에 알려주어 MUX/DEMUX 테이블이 갱신될 수 있도록 해준다. (oms_mux_demux_user_position_update/remove() 함수 이용)
Posted by 신상헌
,
wimax_rs_control 프로세스 모델은 wimax_mac 프로세스의 차일드 프로세스로서, RS 노드의 제어 메시지 처리 및 relay 기능을 담당한다. 즉, 해당 노드가 RS일때만 wimax_rs_control 프로세스가 차일드 프로세스로 생성되는 것이다.


현재(16.0 PL6)의 RS 노드는 transparent relay in cetralized mode 방식으로만 동작하며, UL 구간의 relay만이 이루어진다. MAP에 대한 디코딩은 wimax_rs_control 프로세스에서 수행하지 않으며, wimax_ss_control 프로세스로부터 디코딩된 MAP 정보를 넘겨받아서 사용한다(RS 노드에는 wimax_ss_contrl 프로세스도 같이 생성된다).
wait_for_ss 스테이트는 wimax_ss_control 프로세스에 의한 initial ranging 절차가 끝나기를 기다리는 단계이며, initial ranging이 완료되면 receive_mode 스테이트로 이동한다. 이후, 프로파일에 정의된 주기에 따라 receive_mode 스테이트와 transmit_mode 스테이트간을 오고가며 relay 기능을 수행한다.
Posted by 신상헌
,

"OPNET 기초다지기" 3.5절의 TCP 예제를 수행할 때, 14.0 이상의 버전에서는 Packet discarder 노드 때문에 다음과 같은 에러가 발생하고 시뮬레이션이 정상적으로 수행되지 않는 문제가 발생한다.

Simulation terminated by process (ethernet_mac_v2) at module (top.Logical Network.Server.mac), T (0), EV (64)
An error has been detected by the Ethernet Model Suite.
Check the simulation log for details. If the simulation log was not
enabled, rerun the simulation after enabling this feature in the
Project/Simulation Editor.

이는 14.0 버전에서 수정된 Ethernet MAC 모듈의 코드가 Packet Discarder의 동작과 관련이 있기 때문에 발생하는 현상이다. 다음과 같은 방법을 통해 문제를 피해갈 수 있다. (이 방법은 12.1 버전에 적용해주어도 된다. 12.1 버전에 적용해주면, 기존에 발생하던 경고 메시지가 발생하지 않는다)
1) oms_packet_discarder 프로세서 모델을 프로세스 편집창에서 열고, Interface-->Model Attributes 메뉴를 실행한다.
2) Attribute 항목에 "MAC Parameters"를 추가하고, Type을 compound로 설정한다.
3) 하단의 Edit Properties 버튼을 클릭해서 MAC Parameters에 대한 속성 편집창을 열고, Attribute 항목에 "Operational Mode"를 추가하고 Type을 integer로 설정한다. Default value는 1로 설정한다.
4) Compile-->Compile code 메뉴를 실행하여 oms_packet_discarder 프로세서 모델을 새로 컴파일하고, 시뮬레이션을 다시 실행한다.


위의 방법을 사용하면 최신 버전(16.1)에서도 Packet Discarder 노드를 Ethernet과 연결해서 사용할 수 있다.

그런데, 때로는 Packet discarder를 동작시켰음에도 불구하고 재전송이 일어나지 않는 경우가 있다. (14.5, 15.0, 16.0 버전에서 seed 값으로 128을 사용하였을 때 이러한 현상이 발생하는 것이 확인됨) 이는 폐기된 패킷이 데이터 패킷이 아니라 ACK 패킷이기 때문에 발생하는 현상이다. ACK 패킷은 한두개 손실되더라도 이후에 뒤따라오는 ACK 패킷에 의해서 극복이 가능하기때문에, 재전송이 발생하지 않는다.
이럴 경우에는 Packet Discard Configuration에서 손실되는 패킷의 수(Discard Count)를 2~3으로 증가시켜 시뮬레이션해보면 데이터 패킷에도 손실이 발생하여 재전송이 일어나는 것을 볼 수 있다.


이러한 혼란이 발생하는 근본적인 이유는 우리가 단방향 링크를 사용하지 않고 양방향 링크(Ethernet 100 BaseT)를 사용하여서, 특정 방향으로 향하는 패킷만을 정확히 지정하여 폐기할 수 없기 때문이다. 이더넷 같은 양방향 링크를 사용하지 않고 단방향 링크를 사용하면 이러한 문제를 피해갈 수 있겠지만, 노드 모델 교체나 포트 설정등의 작업이 추가적으로 필요하다. 여기에서는 앞에서 만들었던 예제 시나리오를 최대한 재활용하는 것이 목적이므로, 양방향 노드를 그대로 두고 사용하기로 한다.

Posted by 신상헌
,
wimax_ss_control 프로세스 모델은 wimax_mac 프로세스의 차일드 프로세스로서, SS 노드의 제어 메시지 처리 및 MAP 디코딩, BS 탐색, 연결 설정/해제 등의 관리 기능을 담당한다. 즉, 해당 노드가 SS 또는 RS 일때만 wimax_ss_control 프로세스가 차일드 프로세스로 생성되는 것이다.


wimax_ss_control 프로세스 모델은 스테이트 다이어그램이 대단히 복잡하게 되어 있는데, 이는 SS에서 수행되어야하는 기능이 많은 탓도 있겠지만 실은 wimax_ss_control 프로세스 모델이 개발된 과정과도 큰 관련이 있다(아마도, 단일 프로세스 모델로서는 OPNET을 통털어 가장 복잡한 범주에 들 것이다. 하지만, 소스 코드의 양을 비교해보면 복잡하기 그지없어 보이는 wimax_ss_control 프로세스 모델이 11,000 라인정도인데 비하여, 아주 단순한 구조를 가지고 있는 wimax_bs_control 프로세스 모델은 21,000 라인이나 된다). WiMAX 모델은 여러가지 기능들이 몇차례의 단계를 거쳐서 개발되었는데(이는 현재에도 Simulation Efficiency와 관련이 깊다). wimax_ss_control 프로세스 모델의 경우 초기 단계에서 이후의 기능 확장을 충분히 고려하여 설계하지 못한 듯 하다.
이 탓에 초기에는 아주 단순한 구조로만 되어 있던 프로세스 모델이었지만, 이후에 기능이 추가될 때마다 스테이트도 계속 늘어나서 현재와 같이 매우 복잡한 구조가 되어버렸다. 실제로 다음 그림의 초기 wimax_ss_control 프로세스 모델을 살펴보면, wimax_bs_control 프로세스 만큼이나 아주 단순한 구조로 설계되어 있는 것을 볼 수 있다.


wimax_ss_control 프로세스 모델의 스테이트들은 Initial Ranging, Connected, Scanning/Handover, Power Saving의 4가지 기능영역으로 크게 나눌 수 있으며, 프로세스 모델에서 각각 보라색, 녹색, 노락색, 하늘색으로 표시되어 있다. Initial Ranging 영역에서는 연결할 새로운 BS를 선택하고 initial ranging을 통해 Basic Connection을 수립하는 기능을 수행한다. Connected 영역에서는 UL-MAP에 대한 디코딩과 periodic ranging, 그리고 제어 패킷들에 대한 처리를 수행한다. Scannning/Handover 영역에서는 주변 BS들에 대한 scanning과 target BS 결정, 그리고 Handover 메시지 송수신 기능을 수행한다. Power Saving 영역에서는 장시간 데이터 송/수신이 없는 단말의 에너지 소모를 줄이기 위해서 sleep과 listen 기능을 수행한다.
Posted by 신상헌
,
얼마전에 OPNET Modeler 16.1 버전이 발표되었다. ("OPNET Modeler 16.1 PL1 발표" 참조) 하지만, 새 버전에는 WiMAX 모델에 대한 변경이 미미한 것으로 보여진다. 그래서, 여기에서는 기존에 분석중이었던 16.0 PL6 버전을 기준으로 분석을 계속하겠다. 

==========================================================================================
wimax_bs_control 프로세스 모델은 wimax_mac 프로세스의 차일드 프로세스로서, BS 노드의 제어 메시지 처리 및 MAP 생성 등의 관리 기능을 담당한다. 즉, 해당 노드가 BS 일때만 wimax_bs_control 프로세스가 차일드  프로세스로 생성되는 것이다.


외부로부터 wimax_bs_control 프로세스로 전달되는 패킷은 모두 제어 메시지이므로, CONTROL_PACKET에 의한 천이가 발생하고 제어 메시지 종류에 따라 처리해준다. DSA-REQ 메시지인 경우에는 연결 수락 여부를 결정하는 Admission control이 수행되고, BWR 메시지인 경우에는 UL구간 BW 할당 절차를 수행한다. 패킷이 도착하지 않았더라도 ASN 시그날링이 도착한 경우에는 CONTROL_PACKET 천이가 발생한다.
외부로부터의 인터럽트가 발생하였지만 패킷이 없는 경우는 BS에서 DL구간 BW를 요청하는 것이므로, BW 할당 절차를 수행한다. WIMAXC_BWR_SELF_ARRIVAL 코드를 가지는 셀프 인터럽트가 발생한 경우는 제어 메시지 전달을
위한 DL구간 BW가 필요한 것이므로, 역시 BW 할당 절차를 수행한다.
wimax_bs_control 프로세스는 MAP 생성을 위한 셀프 인터럽트를 주기적으로 발생시키며, 이 이벤트에 따라 DL/UL-MAP을 생성하여 wimax_mac 프로세스로 넘겨준다.
Posted by 신상헌
,
오늘(2011년6월7일, 한국시간) OPNET Modeler 16.1 PL1 버전이 발표되었습니다(이전 버전에 관한 내용은 "OPNET Modeler 16.0 PL6 발표" 참조). 지난 5월에 IT Guru와 SP Guru는 17.0 버전이 발표되었었기때문에 Modeler도 17.0 버전이 될 것으로 생각했는데, 좀 의외입니다. (Modeler와 IT Guru가 서로 다른 버전을 사용하는 것도 처음일 겁니다.) 먼저 User Forum에 올라온 안내는 다음과 같습니다.

- New 802.11n Wireless LAN model, including support for:
      High Throughput (HT) operation in a 20 MHz channel
      Backward compatibility support with 802.11a/b/g nodes
      Abstracted MIMO model (with data rate adjustments for spatial multiplexing)
- Significant enhancements to the LTE Specialized Model, including support for:
      Handover mechanisms for mobility (Intra E-UTRAN)
          Inter- and intra-frequency
          With S1 or X2 interfaces
      Multimedia Broadcast Multicast Service (MBMS)
      GGSN services by EPC to legacy SGSNs
      Dynamic failure/recovery of base stations
- HAIPE model enhancements, including:
      IPv6 support
      IKEv2 support
      Generic Discovery Client (GDC) server communications using a MANET-based protocol
      Security policy database selector enhancements to represent current HAIPE configurations as defined in the MIB
      Security Association (SA) enhancements, including Robust Header Compression (RoHC) implementation and NAT-T support
- Support for TIREM Module on Windows 64-bit operating systems

가장 큰 변화는 802.11n이 추가되었다는 것입니다. 그동안 정말 많은 사용자들이 필요로 하던 기능이었는데 많이 늦은 감이 있지만 이제라도 추가되어서 정말 다행입니다. Release note를 통해 조금 더 자세히 살펴보니, 다음의 기능들이 현재 지원된다고 합니다.

- HT PPDU support (HT-Mixed format and HT-Greenfield format) with HT data rates
- Short guard intervals, which allow higher data rates
- MIMO capability, which allows higher data rates, however the physical layer details of MIMO are not currently implemented
- Reduced inter-frame spacing (RIFS)
- Backward compatibility with non-HT STAs

LTE는 역시 꾸준하게 업데이트되고 있네요. LTE의 업데이트 내용은 공지사항에 잘 설명된 것 같습니다.'
TIREM 모듈이 64비트 윈도우에서 사용가능하게 되었다는 점은 꽤 중요한 사항으로 생각됩니다만, 정작 release note에는 관련된 언급이 없어서 추후에 확인이 필요할 것 같습니다. (64비트 윈도우에서의 OPNET 설치에 관해서는
"64비트 버전의 OPNET을 위한 VIsual Stuido 2008 환경변수 설정 및 주의사항" 참조)

이외에도 여러가지 추가/변경된 사항들이 있지만, 현재 관심이 가는 내용이 아니라서 생략합니다.

'Riverbed Modeler(OPNET) > Release notes' 카테고리의 다른 글

OPNET Modeler 17.1 PL2 발표  (0) 2012.08.01
OPNET Modeler 17.1 PL1 발표  (0) 2011.10.23
OPNET Modeler 16.0 PL6 발표  (0) 2010.11.09
OPNET Modeler 16.0 PL4 발표  (0) 2010.08.17
OPNET Modeler 16.0.A PL1 발표  (0) 2010.01.03
Posted by 신상헌
,
wimax_mac 프로세스 모델은 WiMAX MAC에서 루트 프로세스이며 BS와 SS, 그리고 RS에서 공통적으로 사용된다.


상위 계층(IP)에서 MAC으로 내려온 패킷과 하위 계층(PHY)에서 수신된 패킷은 모두 일단 이곳을 거쳐서 처리된다. 상위 계층에서 내려온 패킷은 모두 데이터 패킷이며, 하위 계층에서 수신된 패킷은 데이터 패킷과 제어 패킷이 섞여 있다. 사용자 데이터일 경우 이 프로세스 모델에서 직접 처리한고, 제어 패킷일 경우 차일드 프로세스에서 처리될 수 있도록 패킷을 넘겨준다.
tx_schedule 스테이트로의 천이는 SS에서 UL-MAP을 수신하였을 때나 BS에서 DL-MAP 정보를 생성하였을 때, 해당 차일드 프로세스가 알려주는 이벤트에 의해서 발생한다. tx_schedule 스테이트에서는 이렇게 전달받은 승인(grant) 정보들을 이용하여 데이터 패킷이나 제어 패킷에 대한 전송을 op_pk_deliver_delayed() 함수를 통해서 미리 예약해서 전송한다.
Posted by 신상헌
,
CD 바인더를 정리하다가 나온 OPNET CD들을 한곳에 모아서 한컷 찍어보았습니다.


예전에는 이렇게 버전별로 디자인이 다른 CD에 담아서 배포했었는데, 어느 무렵부터인가 그냥 똑같은 디자인의 CD에 버전만 스티커로 표시해서 배포하더군요. 아마 두자리수 버전으로 넘어가던 시점부터였을 겁니다. 뭐, CD가 중요한건 아닙니다만, 오랜만에 예전 CD들을 보니, 그나마 좀 디자인이 나아 보이네요.
OPNET을 처음 접했던 때가 1997년, 그러니까 학부 4학년 여름 무렵이었던 걸로 기억합니다. 위 사진에도 보이는 3.0.B 버전이었습니다(그 이후로는 B가 붙는 버전을 본 기억이 없네요). 하지만, 이때에는 그냥 OPNET을 접했을 뿐이고, 본격적으로 사용하기 시작한 것은 대학원에 진학한 1998년, 3.5.A 버전부터였습니다.
이 당시에는 OPNET을 사용할 때, SUN Solaris 서버에 설치해두고 PC에서 서버로 X매니저나 CDE를 통해서 접속하는 방법을 주로 사용했었습니다. PC의 성능 문제도 있거니와 Windows계열은 NT만을 지원했던 터라, Windows 95나 98을 주로 사용했던 개인 PC에 직접 설치해서 사용하기에는 좀 힘들었기 때문입니다.
박사과정을 마칠때까지 6.0 버전을 사용했었고, 연구실 자산관리를 대부분 제가 담당했던 터라 남은 CD를 제가 보관하고 있었네요. (사실 CD는 서류 처리를 위한 것이지, 실제로는 별 의미가 없죠.) 그 이후에는 회사에서 사용했기 때문에 개인적으로 보관하고 있는 CD가 없습니다.
Posted by 신상헌
,