blob: 891d9d0231e62ef040d41d348414a742edfd0a2d [file] [log] [blame]
/*
* Copyright (c) 2018, Sam Kumar <samkumar@cs.berkeley.edu>
* Copyright (c) 2018, University of California, Berkeley
* All rights reserved.
*
* 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 of the copyright holder 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 HOLDER 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.
*/
/**
* @file
* This file defines the interface between TCPlp and the host network stack
* (OpenThread, in this case). It is based on content taken from TCPlp,
* modified to work with this port of TCPlp to OpenThread.
*/
#ifndef TCPLP_H_
#define TCPLP_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <errno.h>
#include <openthread/ip6.h>
#include <openthread/message.h>
#include "bsdtcp/ip6.h"
#include "bsdtcp/tcp.h"
#include "bsdtcp/tcp_fsm.h"
#include "bsdtcp/tcp_timer.h"
#include "bsdtcp/tcp_var.h"
#define RELOOKUP_REQUIRED -1
#define CONN_LOST_NORMAL 0
struct tcplp_signals
{
uint32_t links_popped;
uint32_t bytes_acked;
bool conn_established;
bool recvbuf_added;
bool rcvd_fin;
};
/*
* Functions that the TCP protocol logic can call to interact with the rest of
* the system.
*/
otMessage * tcplp_sys_new_message(otInstance *instance);
void tcplp_sys_free_message(otInstance *instance, otMessage *pkt);
void tcplp_sys_send_message(otInstance *instance, otMessage *pkt, otMessageInfo *info);
uint32_t tcplp_sys_get_ticks();
uint32_t tcplp_sys_get_millis();
void tcplp_sys_set_timer(struct tcpcb *tcb, uint8_t timer_flag, uint32_t delay);
void tcplp_sys_stop_timer(struct tcpcb *tcb, uint8_t timer_flag);
struct tcpcb *tcplp_sys_accept_ready(struct tcpcb_listen *tpl, struct in6_addr *addr, uint16_t port);
bool tcplp_sys_accepted_connection(struct tcpcb_listen *tpl,
struct tcpcb * accepted,
struct in6_addr * addr,
uint16_t port);
void tcplp_sys_connection_lost(struct tcpcb *tcb, uint8_t errnum);
void tcplp_sys_on_state_change(struct tcpcb *tcb, int newstate);
void tcplp_sys_log(const char *format, ...);
void tcplp_sys_panic(const char *format, ...);
bool tcplp_sys_autobind(otInstance * aInstance,
const otSockAddr *aPeer,
otSockAddr * aToBind,
bool aBindAddress,
bool aBindPort);
uint32_t tcplp_sys_generate_isn();
#ifdef __cplusplus
} // extern "C"
#endif
#endif // TCPLP_H_