Nol.A SDK Library
24.11.0
For IoT System Software Development
|
#include <IPv6LoRaWAN.hpp>
Public Member Functions | |
IPv6LoRaWAN (LoRaMac &mac, uint8_t fPort=0) | |
IPv6LoRaWAN 인터페이스를 생성합니다. More... | |
error_t | begin (const uint8_t *devIID, const uint8_t *appIID) |
IPv6LoRaWAN 인터페이스를 시작합니다. More... | |
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. More... | |
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. More... | |
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 |
IPv6 over LoRaWAN.
LoRaWAN 에서 IPv6 패킷을 전송하기 위한 IPv6 인터페이스입니다. IETF의 LPWAN WG의 draft-ietf-lpwan-ipv6-static-context-hc-16 (이하 IPv6 SCHC)을 기반으로 구현되었습니다. 해당 IETF 문서는 RFC가 아니며 이 클래스 또한 실험적으로 구현되었습니다. 또한 이를 연동하기 위해서는 server-side 에서도 적절한 내용이 구현되어야 합니다. 자세한 기술 문의는 suppo 로 해주시기 바랍니다. rt@c oxlab .kr
SCHC는 대역폭이 매우 제한적인 LoRaWAN 환경에서 애플리케이션 서버(이하 서버)와 디바이스가 공통의 context를 공유하여 IPv6에 대해 최고의 압축을 수행하여 IPv6 패킷을 전송하기 위한 압축기술 입니다. SCHC는 LoRaWAN 을 포함한 LPWAN에서 공통으로 적용될 수 있는 내용을 기술한 것으로 LoRaWAN-specific SCHC는 별도의 문서(draft-petrov-lpwan-ipv6-schc-over-lorawan-02)에 정의가 될 예정입니다. 하지만 현 시점에서 그 내용이 아직 부족하여 다음과 같이 몇가지를 강제합니다.
IPv6 SCHC Rule ID (8-byte) | Compression Residue (M-byte) | UDP data (N-byte) |
Field | FL | FP | DI | Value | Match Operation | Comp./Decomp. Action | Sent Bits |
---|---|---|---|---|---|---|---|
IPv6 Version | 4 | 1 | Bi | 6 | equal | not-sent | 0 |
IPv6 DiffServ | 8 | 1 | Bi | 0 | equal | not-sent | 0 |
IPv6 Flow Label | 20 | 1 | Bi | 0 | equal | not-sent | 0 |
IPv6 Length | 16 | 1 | Bi | ignore | comp-length | 0 | |
IPv6 Next Header | 8 | 1 | Bi | 17 | equal | not-sent | 0 |
IPv6 Hop Limit | 8 | 1 | Bi | ignore | value-sent | 8 | |
IPv6 Dev Prefix | 64 | 1 | Bi | fe80:: | equal | not-sent | 0 |
IPv6 Dev IID | 64 | 1 | Bi | ignore | DevEUI | 0 | |
IPv6 App Prefix | 64 | 1 | Bi | fe80:: | equal | not-sent | 0 |
IPv6 App IID | 64 | 1 | Bi | ignore | AppEUI | 0 | |
UDP Dev Port | 16 | 1 | Bi | ignore | value-sent | 16 | |
UDP App Port | 16 | 1 | Bi | ignore | value-sent | 16 | |
UDP Length | 16 | 1 | Bi | ignore | comp-length | 0 | |
UDP Checksum | 16 | 1 | Bi | ignore | comp-checksum | 0 |
IPv6LoRaWAN::IPv6LoRaWAN | ( | LoRaMac & | mac, |
uint8_t | fPort = 0 |
||
) |
IPv6LoRaWAN 인터페이스를 생성합니다.
mac | 사용할 LoRaWAN MAC |
fPort | 사용할 fPort 주소. 0 인 경우, Rule ID에 해당하는 fPort로 전송합니다. 0 이 아닌 경우, 지정한 fPort로 전송이 되며, Rule ID는 SCHC 패킷 가장 앞에 위치하게 됩니다. (기본 값: 0) |
error_t IPv6LoRaWAN::begin | ( | const uint8_t * | devIID, |
const uint8_t * | appIID | ||
) |
IPv6LoRaWAN 인터페이스를 시작합니다.
devIID | 내 주소 생성에 사용할 나의 EUI-64 |
appIID | 상대방 주소에 참고할 애플리케이션 서버의 EUI-64 |
이 함수를 부르기 전, 생성자에서 지정한 LoRaWAN MAC은 각종 콜백함수 지정, 시작(LoRaMac::begin()) 및 네트워크에 join이 완료되어야 합니다.
IPv6LoRaWAN 인터페이스가 시작되면 LoRaWAN MAC의 다음 함수에서 지정한 콜백들은 이 인터페이스에 의해 인터셉트됩니다.