diff --git a/Makefile.dep b/Makefile.dep index 8e1a798200dffab55b900fbe9ea31108c59802a9..3cecda907ee9492dcca651517b7bdbccd6fedd3e 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -154,7 +154,7 @@ ifneq (,$(filter gnrc_netif,$(USEMODULE))) endif endif -ifneq (,$(filter ieee802154 nrfmin esp_now,$(USEMODULE))) +ifneq (,$(filter ieee802154 nrfmin esp_now gnrc_sixloenc,$(USEMODULE))) ifneq (,$(filter gnrc_ipv6, $(USEMODULE))) USEMODULE += gnrc_sixlowpan endif diff --git a/makefiles/pseudomodules.inc.mk b/makefiles/pseudomodules.inc.mk index 3de942f1657ba9809a7d36015d64f2825aefc1a3..7f05cc9ff5d6bda4a1980b29c3b0e3420a8d3454 100644 --- a/makefiles/pseudomodules.inc.mk +++ b/makefiles/pseudomodules.inc.mk @@ -25,6 +25,7 @@ PSEUDOMODULES += gnrc_neterr PSEUDOMODULES += gnrc_netapi_callbacks PSEUDOMODULES += gnrc_netapi_mbox PSEUDOMODULES += gnrc_pktbuf_cmd +PSEUDOMODULES += gnrc_sixloenc PSEUDOMODULES += gnrc_sixlowpan_border_router_default PSEUDOMODULES += gnrc_sixlowpan_default PSEUDOMODULES += gnrc_sixlowpan_iphc_nhc diff --git a/sys/include/net/ethertype.h b/sys/include/net/ethertype.h index 7368b6bde50bd36f2b2670a168a82cde5ded9845..5fb7b727b48f49a24958602919404edc51e74019 100644 --- a/sys/include/net/ethertype.h +++ b/sys/include/net/ethertype.h @@ -37,6 +37,7 @@ extern "C" { #define ETHERTYPE_CCNX (0x0801) /**< Parc CCNX */ #define ETHERTYPE_NDN (0x8624) /**< NDN Protocol (http://named-data.net/) */ #define ETHERTYPE_IPV6 (0x86dd) /**< Internet protocol version 6 */ +#define ETHERTYPE_6LOENC (0xa0ed) /**< 6LoWPAN encapsulation */ #define ETHERTYPE_UNKNOWN (0xffff) /**< Reserved (no protocol specified) */ #ifdef __cplusplus diff --git a/sys/include/net/gnrc/nettype.h b/sys/include/net/gnrc/nettype.h index b50d69cc9713a55f7664197364c3db8d50680dea..70b58aafaf4b2af7a6b8299b62faf4a42dc1d415 100644 --- a/sys/include/net/gnrc/nettype.h +++ b/sys/include/net/gnrc/nettype.h @@ -158,6 +158,10 @@ static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type) #elif defined(MODULE_NDN_RIOT) return GNRC_NETTYPE_NDN; #endif +#endif +#ifdef MODULE_GNRC_SIXLOENC + case ETHERTYPE_6LOENC: + return GNRC_NETTYPE_SIXLOWPAN; #endif default: return GNRC_NETTYPE_UNDEF; @@ -178,6 +182,10 @@ static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type) static inline uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type) { switch (type) { +#ifdef MODULE_GNRC_SIXLOENC + case GNRC_NETTYPE_SIXLOWPAN: + return ETHERTYPE_6LOENC; +#endif #ifdef MODULE_GNRC_IPV6 case GNRC_NETTYPE_IPV6: return ETHERTYPE_IPV6; diff --git a/sys/net/gnrc/netif/gnrc_netif.c b/sys/net/gnrc/netif/gnrc_netif.c index 74845ae7ff636a49d2f0dc2afffd31314256b30b..cda15210f97f6419993c34edd5f7e18e8e45795d 100644 --- a/sys/net/gnrc/netif/gnrc_netif.c +++ b/sys/net/gnrc/netif/gnrc_netif.c @@ -1114,6 +1114,9 @@ static ipv6_addr_t *_src_addr_selection(gnrc_netif_t *netif, bool gnrc_netif_is_6ln(const gnrc_netif_t *netif) { switch (netif->device_type) { +#ifdef MODULE_GNRC_SIXLOENC + case NETDEV_TYPE_ETHERNET: +#endif case NETDEV_TYPE_IEEE802154: case NETDEV_TYPE_CC110X: case NETDEV_TYPE_BLE: @@ -1177,7 +1180,9 @@ static void _init_from_device(gnrc_netif_t *netif) assert(res == sizeof(tmp)); netif->device_type = (uint8_t)tmp; switch (netif->device_type) { -#if defined(MODULE_NETDEV_IEEE802154) || defined(MODULE_NRFMIN) || defined(MODULE_XBEE) || defined(MODULE_ESP_NOW) +#if defined(MODULE_NETDEV_IEEE802154) || defined(MODULE_NRFMIN) || \ + defined(MODULE_XBEE) || defined(MODULE_ESP_NOW) || \ + defined(MODULE_GNRC_SIXLOENC) case NETDEV_TYPE_IEEE802154: case NETDEV_TYPE_NRFMIN: #ifdef MODULE_GNRC_SIXLOWPAN_IPHC @@ -1201,6 +1206,9 @@ static void _init_from_device(gnrc_netif_t *netif) case NETDEV_TYPE_ETHERNET: #ifdef MODULE_GNRC_IPV6 netif->ipv6.mtu = ETHERNET_DATA_LEN; +#endif +#if defined(MODULE_GNRC_SIXLOWPAN_IPHC) && defined(MODULE_GNRC_SIXLOENC) + netif->flags |= GNRC_NETIF_FLAGS_6LO_HC; #endif break; #endif