net: tftp: Adding support for TFTP Client.

Adding RFC1350 compliant support for TFTP Client in Zephyr. The
current implementation is minimal and only supports the ability
to get a file from the server.

Things for the future include support for putting files to
server and adding support for RFC2347.

Signed-off-by: Bilal Wasim <bilalwasim676@gmail.com>
This commit is contained in:
Bilal Wasim 2020-04-22 04:40:18 +05:00 committed by Jukka Rissanen
commit 220b664617
7 changed files with 455 additions and 0 deletions

50
include/net/tftp.h Normal file
View file

@ -0,0 +1,50 @@
/*
* Copyright (c) 2020 InnBlue
*
* SPDX-License-Identifier: Apache-2.0
*/
/** @file tftp.h
*
* @brief Zephyr TFTP Implementation
*/
#ifndef ZEPHYR_INCLUDE_NET_TFTP_H_
#define ZEPHYR_INCLUDE_NET_TFTP_H_
#include <zephyr.h>
#include <net/socket.h>
#ifdef __cplusplus
extern "C" {
#endif
struct tftpc {
u8_t *user_buf;
u32_t user_buf_size;
};
/* TFTP Client Error codes. */
#define TFTPC_SUCCESS 0
#define TFTPC_DUPLICATE_DATA -1
#define TFTPC_BUFFER_OVERFLOW -2
#define TFTPC_UNKNOWN_FAILURE -3
#define TFTPC_REMOTE_ERROR -4
#define TFTPC_RETRIES_EXHAUSTED -5
/* @brief This function gets "file" from the remote server.
*
* @param server Control Block that represents the remote server.
* @param client Client Buffer Information.
* @param remote_file Name of the remote file to get.
* @param mode TFTP Client "mode" setting
*
* @return TFTPC_SUCCESS if the operation completed successfully.
* TFTPC_BUFFER_OVERFLOW if the file is larger than the user buffer.
* TFTPC_REMOTE_ERROR if the server failed to process our request.
* TFTPC_RETRIES_EXHAUSTED if the client timed out waiting for server.
*/
int tftp_get(struct sockaddr *server, struct tftpc *client,
const char *remote_file, const char *mode);
#endif /* ZEPHYR_INCLUDE_NET_TFTP_H_ */