266 lines
9.7 KiB
C
266 lines
9.7 KiB
C
/****************************************************************************
|
|
* net/sixlowpan/sixlowpan.h
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __NET_SIXLOWPAN_SIXLOWPAN_H
|
|
#define __NET_SIXLOWPAN_SIXLOWPAN_H
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
#include <sys/types.h>
|
|
|
|
#ifdef CONFIG_NET_6LOWPAN
|
|
|
|
/****************************************************************************
|
|
* Public Types
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Public Function Prototypes
|
|
****************************************************************************/
|
|
|
|
struct net_driver_s; /* Forward reference */
|
|
struct ipv6_hdr_s; /* Forward reference */
|
|
struct socket; /* Forward reference */
|
|
struct sockaddr; /* Forward reference */
|
|
|
|
/****************************************************************************
|
|
* Name: sixlowpan_initialize
|
|
*
|
|
* Description:
|
|
* sixlowpan_initialize() is called during OS initialization at power-up
|
|
* reset. It is called from the common net_setup() function.
|
|
* sixlowpan_initialize() configures 6LoWPAN networking data structures.
|
|
* It is called prior to platform-specific driver initialization so that
|
|
* the 6LoWPAN networking subsystem is prepared to deal with network
|
|
* driver initialization actions.
|
|
*
|
|
* Input Parameters:
|
|
* None
|
|
*
|
|
* Returned Value:
|
|
* None
|
|
*
|
|
****************************************************************************/
|
|
|
|
void sixlowpan_initialize(void);
|
|
|
|
/****************************************************************************
|
|
* Name: psock_6lowpan_tcp_send
|
|
*
|
|
* Description:
|
|
* psock_6lowpan_tcp_send() call may be used only when the TCP socket is in
|
|
* a connected state (so that the intended recipient is known).
|
|
*
|
|
* Input Parameters:
|
|
* psock - An instance of the internal socket structure.
|
|
* buf - Data to send
|
|
* len - Length of data to send
|
|
*
|
|
* Returned Value:
|
|
* On success, returns the number of characters sent. On error,
|
|
* -1 is returned, and errno is set appropriately. Returned error numbers
|
|
* must be consistent with definition of errors reported by send() or
|
|
* sendto().
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifdef CONFIG_NET_TCP
|
|
ssize_t psock_6lowpan_tcp_send(FAR struct socket *psock, FAR const void *buf,
|
|
size_t len);
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Name: sixlowpan_tcp_send
|
|
*
|
|
* Description:
|
|
* TCP output comes through three different mechansims. Either from:
|
|
*
|
|
* 1. TCP socket output. For the case of TCP output to an
|
|
* IEEE802.15.4, the TCP output is caught in the socket
|
|
* send()/sendto() logic and and redirected to psock_6lowpan_tcp_send().
|
|
* 2. TCP output from the TCP state machine. That will occur
|
|
* during TCP packet processing by the TCP state meachine.
|
|
* 3. TCP output resulting from TX or timer polling
|
|
*
|
|
* Cases 2 and 3 will be handled here. Logic in ipv6_tcp_input(),
|
|
* and devif_poll() detect if (1) an attempt to return with
|
|
* d_len > 0 and (2) that the device is an IEEE802.15.4 MAC network
|
|
* driver. Under those conditions, this function will be called to create
|
|
* the IEEE80215.4 frames.
|
|
*
|
|
* Input Parameters:
|
|
* dev - The network device containing the packet to be sent.
|
|
* fwddev - The network device used to send the data. This will be the
|
|
* same device except for the IP forwarding case where packets
|
|
* are sent across devices.
|
|
* ipv6 - A pointer to the IPv6 header in dev->d_buf which lies AFTER
|
|
* the L1 header. NOTE: dev->d_len must have been decremented
|
|
* by the size of any preceding MAC header.
|
|
*
|
|
* Returned Value:
|
|
* None
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
void sixlowpan_tcp_send(FAR struct net_driver_s *dev,
|
|
FAR struct net_driver_s *fwddev,
|
|
FAR struct ipv6_hdr_s *ipv6);
|
|
|
|
/****************************************************************************
|
|
* Name: sixlowpan_icmpv6_send
|
|
*
|
|
* Description:
|
|
* All outgoing ICMPv6 messages come through one of two mechanisms:
|
|
*
|
|
* 1. The output from internal ICMPv6 message passing. These outgoing
|
|
* messages will use device polling.
|
|
* 2. ICMPv6 output resulting from TX or timer polling.
|
|
*
|
|
* Both cases are handled here.
|
|
*
|
|
* Input Parameters:
|
|
* dev - The network device containing the packet to be sent.
|
|
* fwddev - The network device used to send the data. This will be the
|
|
* same device except for the IP forwarding case where packets
|
|
* are sent across devices.
|
|
* ipv6 - A pointer to the IPv6 header in dev->d_buf which lies AFTER
|
|
* the L1 header. NOTE: dev->d_len must have been decremented
|
|
* by the size of any preceding MAC header.
|
|
*
|
|
* Returned Value:
|
|
* None
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifdef CONFIG_NET_ICMPv6
|
|
void sixlowpan_icmpv6_send(FAR struct net_driver_s *dev,
|
|
FAR struct net_driver_s *fwddev,
|
|
FAR struct ipv6_hdr_s *ipv6);
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Name: psock_6lowpan_udp_send
|
|
*
|
|
* Description:
|
|
* psock_6lowpan_udp_send() call may be used with connectionlesss UDP
|
|
* sockets.
|
|
*
|
|
* Input Parameters:
|
|
* psock - An instance of the internal socket structure.
|
|
* buf - Data to send
|
|
* len - Length of data to send
|
|
*
|
|
* Returned Value:
|
|
* On success, returns the number of characters sent. On error,
|
|
* -1 is returned, and errno is set appropriately. Returned error numbers
|
|
* must be consistent with definition of errors reported by send() or
|
|
* sendto().
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifdef CONFIG_NET_UDP
|
|
ssize_t psock_6lowpan_udp_send(FAR struct socket *psock, FAR const void *buf,
|
|
size_t len);
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Name: psock_6lowpan_udp_sendto
|
|
*
|
|
* Description:
|
|
* If sendto() is used on a connection-mode (SOCK_STREAM, SOCK_SEQPACKET)
|
|
* socket, the parameters to and 'tolen' are ignored (and the error EISCONN
|
|
* may be returned when they are not NULL and 0), and the error ENOTCONN is
|
|
* returned when the socket was not actually connected.
|
|
*
|
|
* Input Parameters:
|
|
* psock A pointer to a NuttX-specific, internal socket structure
|
|
* buf Data to send
|
|
* len Length of data to send
|
|
* flags Send flags
|
|
* to Address of recipient
|
|
* tolen The length of the address structure
|
|
*
|
|
* Returned Value:
|
|
* On success, returns the number of characters sent. On error,
|
|
* -1 is returned, and errno is set appropriately. Returned error
|
|
* number must be consistent with definition of errors reported by
|
|
* sendto().
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
ssize_t psock_6lowpan_udp_sendto(FAR struct socket *psock,
|
|
FAR const void *buf,
|
|
size_t len, int flags,
|
|
FAR const struct sockaddr *to,
|
|
socklen_t tolen);
|
|
|
|
/****************************************************************************
|
|
* Name: sixlowpan_udp_send
|
|
*
|
|
* Description:
|
|
* Handles forwarding a UDP packet via 6LoWPAN. This is currently only
|
|
* used by the IPv6 forwarding logic.
|
|
*
|
|
* Input Parameters:
|
|
* dev - An instance of network device state structure
|
|
* fwddev - The network device used to send the data. This will be the
|
|
* same device except for the IP forwarding case where packets
|
|
* are sent across devices.
|
|
* ipv6 - A pointer to the IPv6 header in dev->d_buf which lies AFTER
|
|
* the L1 header. NOTE: dev->d_len must have been decremented
|
|
* by the size of any preceding MAC header.
|
|
*
|
|
* Returned Value:
|
|
* None
|
|
*
|
|
* Assumptions:
|
|
* Called with the network locked.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifdef CONFIG_NET_IPFORWARD
|
|
void sixlowpan_udp_send(FAR struct net_driver_s *dev,
|
|
FAR struct net_driver_s *fwddev,
|
|
FAR struct ipv6_hdr_s *ipv6);
|
|
#endif
|
|
|
|
#endif /* CONFIG_NET_6LOWPAN */
|
|
#endif /* __NET_SIXLOWPAN_SIXLOWPAN_H */
|