| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <stdio.h> |
| #include <limits.h> |
| |
| #include <inet6/inet6.h> |
| |
| #include <zircon/types.h> |
| #include <zircon/boot/netboot.h> |
| |
| // netfile interface |
| typedef struct netfile_state_t { |
| int fd; |
| off_t offset; |
| // false: Filename is the open file and final destination |
| // true : Filename is final destination; open file has a magic tmp suffix |
| bool needs_rename; |
| char filename[PATH_MAX]; |
| } netfile_state; |
| |
| extern netfile_state netfile; |
| |
| typedef struct netfilemsg_t { |
| nbmsg hdr; |
| uint8_t data[1024]; |
| } netfilemsg; |
| |
| int netfile_open(const char* filename, uint32_t arg); |
| |
| int netfile_offset_read(void *data_out, off_t offset, size_t max_len); |
| |
| int netfile_read(void* data_out, size_t data_sz); |
| |
| int netfile_offset_write(const char *data, off_t offset, size_t length); |
| |
| int netfile_write(const char* data, size_t len); |
| |
| int netfile_close(void); |
| |
| void netfile_abort_write(void); |
| |
| // netboot interface |
| extern const char* nodename; |
| extern bool netbootloader; |
| |
| void netboot_advertise(const char* nodename); |
| |
| void netboot_recv(void* data, size_t len, bool is_mcast, |
| const ip6_addr_t* daddr, uint16_t dport, |
| const ip6_addr_t* saddr, uint16_t sport); |
| |
| void netboot_run_cmd(const char* cmd); |
| |
| // TFTP interface |
| extern zx_time_t tftp_next_timeout; |
| |
| void tftp_recv(void *data, size_t len, |
| const ip6_addr_t* daddr, uint16_t dport, |
| const ip6_addr_t* saddr, uint16_t sport); |
| |
| void tftp_timeout_expired(void); |
| |
| // debuglog interface |
| extern zx_time_t debuglog_next_timeout; |
| |
| int debuglog_init(void); |
| |
| void debuglog_recv(void* data, size_t len, bool is_mcast); |
| |
| void debuglog_timeout_expired(void); |