diff --git a/include/nuttx/net/netdev.h b/include/nuttx/net/netdev.h index 6a529fb368..72bddc067c 100644 --- a/include/nuttx/net/netdev.h +++ b/include/nuttx/net/netdev.h @@ -418,6 +418,10 @@ int ipv4_input(FAR struct net_driver_s *dev); int ipv6_input(FAR struct net_driver_s *dev); #endif +#ifdef CONFIG_NET_6LOWPAN +int sixlowpan_input(FAR struct net_driver_s *dev); +#endif + /**************************************************************************** * Polling of connections * diff --git a/include/nuttx/net/sixlowpan.h b/include/nuttx/net/sixlowpan.h index 06ba6ac5c6..4b956db8aa 100644 --- a/include/nuttx/net/sixlowpan.h +++ b/include/nuttx/net/sixlowpan.h @@ -284,7 +284,8 @@ struct sixlowpan_addr_context }; -/* The structure of a next header compressor. +/* The structure of a next header compressor. This compressor is provided + * by architecture-specific logic outside of the network stack. * * TODO: needs more parameters when compressing extension headers, etc. */ @@ -307,8 +308,51 @@ struct sixlowpan_nhcompressor_s FAR uint8_t *uncompressed_len); }; +/* RIME sniffer callbacks */ + +struct sixlowpan_rime_sniffer_s +{ + CODE void (*input)(void); + CODE void (*output)(int mac_status); +}; + /**************************************************************************** * Public Function Prototypes ****************************************************************************/ +/**************************************************************************** + * Function: sixlowpan_set_compressor + * + * Description: + * Configure to use the architecture-specific compressor. + * + * Input parameters: + * compressor - A reference to the new compressor to be used. This may + * be a NULL value to disable the compressor. + * + * Returned Value: + * None + * + ****************************************************************************/ + +void sixlowpan_set_compressor(FAR struct sixlowpan_nhcompressor_s *compressor); + +/**************************************************************************** + * Function: sixlowpan_set_sniffer + * + * Description: + * Configure to use an architecture-specific sniffer to enable tracing of + * IP. + * + * Input parameters: + * sniffer - A reference to the new sniffer to be used. This may + * be a NULL value to disable the sniffer. + * + * Returned Value: + * None + * + ****************************************************************************/ + +void sixlowpan_set_sniffer(FAR struct sixlowpan_rime_sniffer_s *sniffer); + #endif /* __INCLUDE_NUTTX_NET_SIXLOWOAN_H */ diff --git a/net/sixlowpan/Make.defs b/net/sixlowpan/Make.defs index f3e99c3504..150cb6ec88 100644 --- a/net/sixlowpan/Make.defs +++ b/net/sixlowpan/Make.defs @@ -39,7 +39,7 @@ ifeq ($(CONFIG_NET_6LOWPAN),y) # Include IEEE 802.15.4 file in the build -# NET_CSRCS += +NET_CSRCS += sixlowpan_compressor.c sixlowpan_sniffer.c # Include the sixlowpan directory in the build diff --git a/net/sixlowpan/sixlowpan.h b/net/sixlowpan/sixlowpan.h index 38263bc31b..e85135e0cf 100644 --- a/net/sixlowpan/sixlowpan.h +++ b/net/sixlowpan/sixlowpan.h @@ -44,6 +44,19 @@ #ifdef CONFIG_NET_6LOWPAN +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/* A pointer to the optional, architecture-specific compressor */ + +struct sixlowpan_nhcompressor_s; /* Foward reference */ +extern FAR struct sixlowpan_nhcompressor_s *g_sixlowpan_compressor; + +/* Rime Sniffer support for one single listener to enable trace of IP */ + +extern struct sixlowpan_rime_sniffer_s *g_sixlopan_sniffer; + /**************************************************************************** * Public Types ****************************************************************************/ diff --git a/net/sixlowpan/sixlowpan_compressor.c b/net/sixlowpan/sixlowpan_compressor.c new file mode 100644 index 0000000000..0f78113802 --- /dev/null +++ b/net/sixlowpan/sixlowpan_compressor.c @@ -0,0 +1,88 @@ +/**************************************************************************** + * net/sixlowpan/sixlowpan_compressor.c + * + * Copyright (C) 2017 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "nuttx/net/net.h" +#include "nuttx/net/sixlowpan.h" + +#include "sixlowpan/sixlopan.h" + +#ifdef CONFIG_NET_6LOWPAN + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/* A pointer to the optional, architecture-specific compressor */ + +FAR struct sixlowpan_nhcompressor_s *g_sixlowpan_compressor; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: sixlowpan_set_compressor + * + * Description: + * Configure to use the architecture-specific compressor. + * + * Input parameters: + * compressor - A reference to the new compressor to be used. This may + * be a NULL value to disable the compressor. + * + * Returned Value: + * None + * + ****************************************************************************/ + +void sixlowpan_set_compressor(FAR struct sixlowpan_nhcompressor_s *compressor) +{ + /* Make sure that the compressor is not in use */ + + net_lock(); + + /* Then instantiate the new compressor */ + + g_sixlowpan_compressor = compressor; + net_unlock(); +} + +#endif /* CONFIG_NET_6LOWPAN */ diff --git a/net/sixlowpan/sixlowpan_sniffer.c b/net/sixlowpan/sixlowpan_sniffer.c new file mode 100644 index 0000000000..9f00efe62a --- /dev/null +++ b/net/sixlowpan/sixlowpan_sniffer.c @@ -0,0 +1,89 @@ +/**************************************************************************** + * net/sixlowpan/sixlowpan_sniffer.c + * + * Copyright (C) 2017 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "nuttx/net/net.h" +#include "nuttx/net/sixlowpan.h" + +#include "sixlowpan/sixlopan.h" + +#ifdef CONFIG_NET_6LOWPAN + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/* A pointer to the optional, architecture-specific sniffer */ + +FAR struct sixlowpan_rime_sniffer_s *g_sixlowpan_sniffer; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: sixlowpan_set_sniffer + * + * Description: + * Configure to use an architecture-specific sniffer to enable tracing of + * IP. + * + * Input parameters: + * sniffer - A reference to the new sniffer to be used. This may + * be a NULL value to disable the sniffer. + * + * Returned Value: + * None + * + ****************************************************************************/ + +void sixlowpan_set_sniffer(FAR struct sixlowpan_rime_sniffer_s *sniffer) +{ + /* Make sure that the sniffer is not in use */ + + net_lock(); + + /* Then instantiate the new sniffer */ + + g_sixlowpan_sniffer = sniffer; + net_unlock(); +} + +#endif /* CONFIG_NET_6LOWPAN */