blob: 2669129173fdf88f1993fc6b2d51899f47dfeba8 [file] [log] [blame]
// 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_