| // 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. | |
| #ifndef TOOLS_NETPROTOCOL_NETPROTOCOL_H_ | |
| #define TOOLS_NETPROTOCOL_NETPROTOCOL_H_ | |
| #include <arpa/inet.h> | |
| #include <getopt.h> | |
| #include <stdbool.h> | |
| #include <stdint.h> | |
| #include <zircon/boot/netboot.h> | |
| #define MAXSIZE 1024 | |
| #define TFTP_DEFAULT_BLOCK_SZ 1024 | |
| #define TFTP_DEFAULT_WINDOW_SZ 256 | |
| typedef struct { | |
| struct nbmsg_t hdr; | |
| uint8_t data[MAXSIZE]; | |
| } msg; | |
| typedef enum device_state { | |
| UNKNOWN, | |
| OFFLINE, | |
| DEVICE, | |
| BOOTLOADER, | |
| } device_state_t; | |
| typedef struct device_info { | |
| char nodename[MAX_NODENAME_LENGTH]; | |
| char inet6_addr_s[INET6_ADDRSTRLEN]; | |
| struct sockaddr_in6 inet6_addr; | |
| device_state_t state; | |
| uint32_t bootloader_version; | |
| uint16_t bootloader_port; | |
| } device_info_t; | |
| extern uint16_t tftp_block_size, tftp_window_size; | |
| // Handle netboot command line options. | |
| int netboot_handle_getopt(int argc, char* const* argv); | |
| int netboot_handle_custom_getopt(int argc, char* const* argv, const struct option* custom_opts, | |
| bool (*opt_callback)(int ch, int argc, char* const* argv)); | |
| void netboot_usage(bool show_tftp_opts); | |
| // Returns whether discovery should continue or not. | |
| typedef bool (*on_device_cb)(device_info_t* device, void* cookie); | |
| int netboot_discover(unsigned port, const char* ifname, on_device_cb callback, void* cookie); | |
| int netboot_open(const char* hostname, const char* ifname, struct sockaddr_in6* addr, | |
| bool make_connection); | |
| #endif // TOOLS_NETPROTOCOL_NETPROTOCOL_H_ |