Nol.A SDK Library 26.11.2
For IoT System Software Development
Loading...
Searching...
No Matches
IPv6LoRaWAN Class Reference

IPv6 over LoRaWAN. More...

#include <IPv6LoRaWAN.hpp>

Inheritance diagram for IPv6LoRaWAN:
IPv6Interface PacketRadioEventListener

Public Member Functions

 IPv6LoRaWAN (LoRaMac &mac, uint8_t fPort=0)
 IPv6LoRaWAN 인터페이스를 생성합니다.
error_t begin (const uint8_t *devIID, const uint8_t *appIID)
 IPv6LoRaWAN 인터페이스를 시작합니다.
Public Member Functions inherited from IPv6Interface
 IPv6Interface (Type_t type, uint8_t neigh_list_len, uint8_t prefix_list_len, uint16_t mtu)
error_t getAddress (IPv6Address::Type_t type, IPv6Address &dst)
 Get an IPv6 address assigned to the inf interface.
error_t getAddress (IPv6Address::Type_t type, uint8_t *dst)
uint8_t setPrefix (const IPv6Address &prefix_addr, uint8_t prefix_len, uint32_t lifetime, uint32_t pref_lifetime, bool autoconf)
 Set a prefix to an IPv6 interface.
void setStateNotifier (void(*func)(IPv6Interface &, State_t))
bool isAttached ()
State_t setState (State_t s)

Protected Member Functions

error_t getIID (uint8_t *dst) override
bool isInMulticastGroup (const IPv6Address &mcaddr) override
error_t send (uint8_t nxhop, IPv6PacketBuffer *ippkt) override
void receiveRS (IPv6::Header_t &ip6, void *msg, uint16_t len) override
void receiveRA (IPv6::Header_t &ip6, void *msg, uint16_t len) override
void receiveNS (IPv6::Header_t &ip6, void *msg, uint16_t len) override
void receiveNA (IPv6::Header_t &ip6, void *msg, uint16_t len) override
void receiveRedirect (IPv6::Header_t &ip6, void *msg, uint16_t len) override
void confirmReach (uint8_t neigh) override
void onTick () override
void onStateChanged () override
void notifySendDone (PacketRadio &, RadioPacket *) override
void notifyReceive (PacketRadio &, const RadioPacket *) override
Protected Member Functions inherited from IPv6Interface
bool hasIID (const uint8_t *iid)
virtual uint8_t addNeighbor (const IPv6Address &addr)
void removeNeighbor (uint8_t n)
IPv6Neighbor * getNeighbor (const IPv6Address &addr)
uint8_t getNeighborIndex (const IPv6Address &addr)

Additional Inherited Members

Public Types inherited from IPv6Interface
enum  Type_t {
  TYPE_UNKNOWN = 0 , TYPE_6LOWPAN = 1 , TYPE_ETHERNET = 2 , TYPE_PPP = 3 ,
  TYPE_6LPWAN = 4
}
enum  State_t {
  STATE_NONE = 0 , STATE_BECOMING_HOST = 1 , STATE_DUPLICATE = 2 , STATE_HOST = 3 ,
  STATE_BECOMING_ROUTER = 4 , STATE_ROUTER = 5
}
Static Public Member Functions inherited from IPv6Interface
static const char * GetStateString (State_t)
Protected Attributes inherited from IPv6Interface
bool ll_dad_passed
uint8_t def_hop_limit
const uint16_t MTU
uint16_t pmtu
Type_t dev_type
IPv6Prefix ** prefix = NULL
const uint8_t MAX_NUM_PREFIX
uint8_t num_valid_prefix
IPv6Neighbor ** neighbor = NULL
const uint8_t MAX_NUM_NEIGH
State_t state
void(* notify )(IPv6Interface &, State_t) = NULL
IPv6Interface * next = NULL

Detailed Description

IPv6 over LoRaWAN.

LoRaWAN 에서 IPv6 패킷을 전송하기 위한 IPv6 인터페이스입니다. IETF의 LPWAN WG의 draft-ietf-lpwan-ipv6-static-context-hc-16 (이하 IPv6 SCHC)을 기반으로 구현되었습니다. 해당 IETF 문서는 RFC가 아니며 이 클래스 또한 실험적으로 구현되었습니다. 또한 이를 연동하기 위해서는 server-side 에서도 적절한 내용이 구현되어야 합니다. 자세한 기술 문의는 suppo.nosp@m.rt@c.nosp@m.oxlab.nosp@m..kr 로 해주시기 바랍니다.

SCHC는 대역폭이 매우 제한적인 LoRaWAN 환경에서 애플리케이션 서버(이하 서버)와 디바이스가 공통의 context를 공유하여 IPv6에 대해 최고의 압축을 수행하여 IPv6 패킷을 전송하기 위한 압축기술 입니다. SCHC는 LoRaWAN 을 포함한 LPWAN에서 공통으로 적용될 수 있는 내용을 기술한 것으로 LoRaWAN-specific SCHC는 별도의 문서(draft-petrov-lpwan-ipv6-schc-over-lorawan-02)에 정의가 될 예정입니다. 하지만 현 시점에서 그 내용이 아직 부족하여 다음과 같이 몇가지를 강제합니다.

  • Rule ID: draft-petrov-lpwan-ipv6-schc-over-lorawan-02에서는 이를 LoRaWAN MAC header의 FPort field를 활용한다고 하는데 우리는 fPort를 222번으로 할당하고 Rule ID는 payload에 포함되도록 하였습니다. 이는 IoT.own 등 LoRaWAN 서버들이 당장 IPv6 만을 지원하기 보다는 기존 MAC 프로토콜로도 통신이 되어야 할 가능성이 현실적으로 높기 때문입니다. 따라서 MAC payload는 다음과 같은 내용들이 채워질 것입니다.
    IPv6 SCHC Rule ID (8-byte)Compression Residue (M-byte)UDP data (N-byte)
    • 서버와 디바이스간 Rule ID 및 Rule 에 대한 정의는 factory-programmed를 가정하며 별도의 on-the-fly 전파 프로토콜은 고려하지 않습니다.
    • 압축을 하지 않고 전송할 때는 Rule ID 255를 사용합니다.
    • 최소한의 압축을 수행하는 Rule ID 254는 다음과 같이 정의합니다.
      FieldFLFPDIValueMatch OperationComp./Decomp. ActionSent Bits
      IPv6 Version41Bi6equalnot-sent0
      IPv6 DiffServ81Bi0equalnot-sent0
      IPv6 Flow Label201Bi0equalnot-sent0
      IPv6 Length161Biignorecomp-length0
      IPv6 Next Header81Bi17equalnot-sent0
      IPv6 Hop Limit81Biignorevalue-sent8
      IPv6 Dev Prefix641Bife80::equalnot-sent0
      IPv6 Dev IID641BiignoreDevEUI0
      IPv6 App Prefix641Bife80::equalnot-sent0
      IPv6 App IID641BiignoreAppEUI0
      UDP Dev Port161Biignorevalue-sent16
      UDP App Port161Biignorevalue-sent16
      UDP Length161Biignorecomp-length0
      UDP Checksum161Biignorecomp-checksum0
  • Fragmentation/Reassembly는 지원하지 않습니다.
  • CoAP SCHC (draft-ietf-lpwan-coap-static-context-hc-04)는 지원하지 않습니다.
Examples
plm100s/IPv6overLoRaWAN/main.cpp.

Constructor & Destructor Documentation

◆ IPv6LoRaWAN()

IPv6LoRaWAN::IPv6LoRaWAN ( LoRaMac & mac,
uint8_t fPort = 0 )

IPv6LoRaWAN 인터페이스를 생성합니다.

Parameters
mac사용할 LoRaWAN MAC
fPort사용할 fPort 주소. 0 인 경우, Rule ID에 해당하는 fPort로 전송합니다. 0 이 아닌 경우, 지정한 fPort로 전송이 되며, Rule ID는 SCHC 패킷 가장 앞에 위치하게 됩니다. (기본 값: 0)

Member Function Documentation

◆ begin()

error_t IPv6LoRaWAN::begin ( const uint8_t * devIID,
const uint8_t * appIID )

IPv6LoRaWAN 인터페이스를 시작합니다.

Parameters
devIID내 주소 생성에 사용할 나의 EUI-64
appIID상대방 주소에 참고할 애플리케이션 서버의 EUI-64

이 함수를 부르기 전, 생성자에서 지정한 LoRaWAN MAC은 각종 콜백함수 지정, 시작(LoRaMac::begin()) 및 네트워크에 join이 완료되어야 합니다.

IPv6LoRaWAN 인터페이스가 시작되면 LoRaWAN MAC의 다음 함수에서 지정한 콜백들은 이 인터페이스에 의해 인터셉트됩니다.

◆ confirmReach()

void IPv6LoRaWAN::confirmReach ( uint8_t neigh)
overrideprotectedvirtual

Implements IPv6Interface.

◆ getIID()

error_t IPv6LoRaWAN::getIID ( uint8_t * dst)
overrideprotectedvirtual

Implements IPv6Interface.

◆ isInMulticastGroup()

bool IPv6LoRaWAN::isInMulticastGroup ( const IPv6Address & mcaddr)
overrideprotectedvirtual

Implements IPv6Interface.

◆ notifyReceive()

void IPv6LoRaWAN::notifyReceive ( PacketRadio & ,
const RadioPacket *  )
overrideprotectedvirtual

◆ notifySendDone()

void IPv6LoRaWAN::notifySendDone ( PacketRadio & ,
RadioPacket *  )
overrideprotectedvirtual

◆ onStateChanged()

void IPv6LoRaWAN::onStateChanged ( )
overrideprotectedvirtual

Implements IPv6Interface.

◆ onTick()

void IPv6LoRaWAN::onTick ( )
overrideprotectedvirtual

Implements IPv6Interface.

◆ receiveNA()

void IPv6LoRaWAN::receiveNA ( IPv6::Header_t & ip6,
void * msg,
uint16_t len )
overrideprotectedvirtual

Implements IPv6Interface.

◆ receiveNS()

void IPv6LoRaWAN::receiveNS ( IPv6::Header_t & ip6,
void * msg,
uint16_t len )
overrideprotectedvirtual

Implements IPv6Interface.

◆ receiveRA()

void IPv6LoRaWAN::receiveRA ( IPv6::Header_t & ip6,
void * msg,
uint16_t len )
overrideprotectedvirtual

Implements IPv6Interface.

◆ receiveRedirect()

void IPv6LoRaWAN::receiveRedirect ( IPv6::Header_t & ip6,
void * msg,
uint16_t len )
overrideprotectedvirtual

Implements IPv6Interface.

◆ receiveRS()

void IPv6LoRaWAN::receiveRS ( IPv6::Header_t & ip6,
void * msg,
uint16_t len )
overrideprotectedvirtual

Implements IPv6Interface.

◆ send()

error_t IPv6LoRaWAN::send ( uint8_t nxhop,
IPv6PacketBuffer * ippkt )
overrideprotectedvirtual

Implements IPv6Interface.


The documentation for this class was generated from the following file: