⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 etherboot.h

📁 linux下从网卡远程启动
💻 H
字号:
#include "osdep.h"#ifndef BOOT_FIRST#define BOOT_FIRST	BOOT_NIC#endif#ifndef BOOT_SECOND#define BOOT_SECOND	BOOT_NOTHING#endif#ifndef BOOT_THIRD#define BOOT_THIRD	BOOT_NOTHING#endif#define DEFAULT_BOOT_ORDER ( \	(BOOT_FIRST   << (0*BOOT_BITS)) | \	(BOOT_SECOND  << (1*BOOT_BITS)) | \	(BOOT_THIRD   << (2*BOOT_BITS)) | \	(BOOT_NOTHING << (3*BOOT_BITS)) | \	0)#ifdef BOOT_INDEX#define DEFAULT_BOOT_INDEX BOOT_INDEX#else#define DEFAULT_BOOT_INDEX 0#endif#if	!defined(TAGGED_IMAGE) && !defined(AOUT_IMAGE) && !defined(ELF_IMAGE) && !defined(ELF64_IMAGE) && !defined(COFF_IMAGE)#define	TAGGED_IMAGE		/* choose at least one */#endif#define K_ESC		'\033'#define K_EOF		'\04'  /* Ctrl-D */#define K_INTR		'\03'  /* Ctrl-C *//*  Edit this to change the path to hostspecific kernel image    kernel.<client_ip_address> in RARP boot */#ifndef	DEFAULT_KERNELPATH#define	DEFAULT_KERNELPATH	"/tftpboot/kernel.%@"#endif#ifdef FREEBSD_PXEEMU#undef DEFAULT_BOOTFILE#ifndef PXENFSROOTPATH#define PXENFSROOTPATH ""#endif#define DEFAULT_BOOTFILE	PXENFSROOTPATH "/boot/pxeboot"#endif/* Clean up console settings... mainly CONSOLE_FIRMWARE and CONSOLE_SERIAL are used * in the sources (except start.S and serial.S which cannot include * etherboot.h).  At least one of the CONSOLE_xxx has to be set, and * CONSOLE_DUAL sets both CONSOLE_CRT and CONSOLE_SERIAL.  If none is set, * CONSOLE_CRT is assumed.  */#ifdef CONSOLE_CRT#define CONSOLE_FIRMWARE#endif#ifdef	CONSOLE_DUAL#undef CONSOLE_FIRMWARE#define CONSOLE_FIRMWARE#undef CONSOLE_SERIAL#define CONSOLE_SERIAL#endif#if	defined(CONSOLE_FIRMWARE) && defined(CONSOLE_SERIAL)#undef CONSOLE_DUAL#define CONSOLE_DUAL#endif#if	!defined(CONSOLE_FIRMWARE) && !defined(CONSOLE_SERIAL)#define CONSOLE_FIRMWARE#endif#if	!defined(DOWNLOAD_PROTO_TFTP) && !defined(DOWNLOAD_PROTO_NFS) && !defined(DOWNLOAD_PROTO_SLAM) && !defined(DOWNLOAD_PROTO_TFTM) && !defined(DOWNLOAD_PROTO_DISK)#error No download protocol defined!#endif#ifndef	MAX_TFTP_RETRIES#define MAX_TFTP_RETRIES	20#endif#ifndef	MAX_BOOTP_RETRIES#define MAX_BOOTP_RETRIES	20#endif#define MAX_BOOTP_EXTLEN	(ETH_MAX_MTU-sizeof(struct bootpip_t))#ifndef	MAX_ARP_RETRIES#define MAX_ARP_RETRIES		20#endif#ifndef	MAX_RPC_RETRIES#define MAX_RPC_RETRIES		20#endif/* Link configuration time in tenths of a second */#ifndef VALID_LINK_TIMEOUT#define VALID_LINK_TIMEOUT	100 /* 10.0 seconds */#endif/* Inter-packet retry in ticks */#ifndef TIMEOUT#define TIMEOUT			(10*TICKS_PER_SEC)#endif/* Max interval between IGMP packets */#define IGMP_INTERVAL			(10*TICKS_PER_SEC)#define IGMPv1_ROUTER_PRESENT_TIMEOUT	(400*TICKS_PER_SEC)/* These settings have sense only if compiled with -DCONGESTED *//* total retransmission timeout in ticks */#define TFTP_TIMEOUT		(30*TICKS_PER_SEC)/* packet retransmission timeout in ticks */#define TFTP_REXMT		(3*TICKS_PER_SEC)#ifndef	NULL#define NULL	((void *)0)#endif#include	"if_ether.h"#define ARP_CLIENT	0#define ARP_SERVER	1#define ARP_GATEWAY	2#define MAX_ARP		ARP_GATEWAY+1#define IGMP_SERVER	0#define MAX_IGMP	IGMP_SERVER+1#define	RARP_REQUEST	3#define	RARP_REPLY	4#include	"in.h"#define MULTICAST_MASK    0xF0000000#define MULTICAST_NETWORK 0xE0000000/* Helper macros used to identify when DHCP options are valid/invalid in/outside of encapsulation */#define NON_ENCAP_OPT in_encapsulated_options == 0 &&#ifdef ALLOW_ONLY_ENCAPSULATED#define ENCAP_OPT in_encapsulated_options == 1 &&#else#define ENCAP_OPT#endif#include	"if_arp.h"#include	"ip.h"#include	"udp.h"#include	"bootp.h"#include	"tftp.h"#include	"igmp.h"#include	"nfs.h"struct arptable_t {	in_addr ipaddr;	uint8_t node[6];};struct igmptable_t {	in_addr group;	unsigned long time;};#define	KERNEL_BUF	(BOOTP_DATA_ADDR->bootp_reply.bp_file)#define	FLOPPY_BOOT_LOCATION	0x7c00/* Must match offsets in loader.S */#define ROM_SEGMENT		0x1fa#define ROM_LENGTH		0x1fc#define	ROM_INFO_LOCATION	(FLOPPY_BOOT_LOCATION+ROM_SEGMENT)/* at end of floppy boot block */struct rom_info {	unsigned short	rom_segment;	unsigned short	rom_length;};extern inline int rom_address_ok(struct rom_info *rom, int assigned_rom_segment){	return (assigned_rom_segment < 0xC000		|| assigned_rom_segment == rom->rom_segment);}/* Define a type for passing info to a loaded program */struct ebinfo {	uint8_t  major, minor;	/* Version */	uint16_t flags;		/* Bit flags */};/***************************************************************************External prototypes***************************************************************************//* main.c */struct Elf_Bhdr;extern int main(struct Elf_Bhdr *ptr);extern int loadkernel P((const char *fname));/* nic.c */extern void rx_qdrain P((void));extern int tftp P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));extern int ip_transmit P((int len, const void *buf));extern void build_ip_hdr P((unsigned long destip, int ttl, int protocol, 	int option_len, int len, const void *buf));extern void build_udp_hdr P((unsigned long destip, 	unsigned int srcsock, unsigned int destsock, int ttl,	int len, const void *buf));extern int udp_transmit P((unsigned long destip, unsigned int srcsock,	unsigned int destsock, int len, const void *buf));typedef int (*reply_t)(int ival, void *ptr, unsigned short ptype, struct iphdr *ip, struct udphdr *udp);extern int await_reply P((reply_t reply,	int ival, void *ptr, long timeout));extern int decode_rfc1533 P((unsigned char *, unsigned int, unsigned int, int));extern void join_group(int slot, unsigned long group);extern void leave_group(int slot);#define RAND_MAX 2147483647Lextern uint16_t ipchksum P((const void *ip, unsigned long len));extern uint16_t add_ipchksums P((unsigned long offset, uint16_t sum, uint16_t new));extern int32_t random P((void));extern long rfc2131_sleep_interval P((long base, int exp));extern long rfc1112_sleep_interval P((long base, int exp));#ifndef DOWNLOAD_PROTO_TFTP#define	tftp(fname, load_block) 0#endifextern void cleanup P((void));/* nfs.c */extern void rpc_init(void);extern int nfs P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));extern void nfs_umountall P((int));/* proto_slam.c */extern int url_slam P((const char *name, int (*fnc)(unsigned char *, unsigned int, unsigned int, int)));/* proto_tftm.c */extern int url_tftm P((const char *name, int (*fnc)(unsigned char *, unsigned int, unsigned int, int)));/* config.c */extern void print_config(void);/* heap.c */extern void init_heap(void);extern void *allot(size_t size);void forget(void *ptr);/* Physical address of the heap */extern size_t heap_ptr, heap_top, heap_bot;/* osloader.c */extern int bios_disk_dev;/* Be careful with sector_t it is an unsigned long long on x86 */typedef uint64_t sector_t;typedef sector_t (*os_download_t)(unsigned char *data, unsigned int len, int eof);extern os_download_t probe_image(unsigned char *data, unsigned int len);extern int load_block P((unsigned char *, unsigned int, unsigned int, int ));extern os_download_t pxe_probe P((unsigned char *data, unsigned int len));/* misc.c */extern void twiddle P((void));extern void sleep P((int secs));extern void interruptible_sleep P((int secs));extern void poll_interruptions P((void));extern int strcasecmp P((const char *a, const char *b));extern char *substr P((const char *a, const char *b));extern unsigned long strtoul P((const char *p, const char **, int base));extern void printf P((const char *, ...));extern int sprintf P((char *, const char *, ...));extern int inet_aton P((const char *p, in_addr *i));#ifdef PCBIOSextern void gateA20_set P((void));#ifdef	RELOCATE#define gateA20_unset()#elseextern void gateA20_unset P((void));#endif#else#define gateA20_set()#define gateA20_unset()#endifextern void putchar P((int));extern int getchar P((void));extern int iskey P((void));/* pcbios.S */extern int console_getc P((void));extern void console_putc P((int));extern int console_ischar P((void));extern int getshift P((void));extern int int15 P((int));#ifdef	POWERSAVEextern void cpu_nap P((void));#endif	/* POWERSAVE */extern void fake_irq ( uint8_t irq );/* basemem.c */extern uint32_t get_free_base_memory ( void );extern void adjust_real_mode_stack ( void );extern void * allot_base_memory ( size_t );extern void forget_base_memory ( void*, size_t );extern void free_unused_base_memory ( void );#define PACKED __attribute__((packed))struct e820entry {	uint64_t addr;	uint64_t size;	uint32_t type;#define E820_RAM	1#define E820_RESERVED	2#define E820_ACPI	3 /* usable as RAM once ACPI tables have been read */#define E820_NVS	4} PACKED;#define E820MAX 32struct meminfo {	uint16_t basememsize;	uint16_t pad;	uint32_t memsize;	uint32_t map_count;	struct e820entry map[E820MAX];} PACKED;extern struct meminfo meminfo;extern void get_memsizes(void);extern unsigned long get_boot_order(unsigned long order, unsigned *index);#ifdef RELOCATEextern void relocate(void);extern void relocate_to(unsigned long phys_dest);#else#define relocate() do {} while(0)#endifextern void disk_init P((void));extern unsigned int pcbios_disk_read P((int drv,int c,int h,int s,char *buf));/* start32.S */struct os_entry_regs {	/* Be careful changing this structure	 * as it is used by assembly language code.	 */	uint32_t  edi; /*  0 */	uint32_t  esi; /*  4 */	uint32_t  ebp; /*  8 */	uint32_t  esp; /* 12 */	uint32_t  ebx; /* 16 */	uint32_t  edx; /* 20 */	uint32_t  ecx; /* 24 */	uint32_t  eax; /* 28 */		uint32_t saved_ebp; /* 32 */	uint32_t saved_esi; /* 36 */	uint32_t saved_edi; /* 40 */	uint32_t saved_ebx; /* 44 */	uint32_t saved_eip; /* 48 */	uint32_t saved_esp; /* 52 */};struct regs {	/* Be careful changing this structure	 * as it is used by assembly language code.	 */	uint32_t  edi; /*  0 */	uint32_t  esi; /*  4 */	uint32_t  ebp; /*  8 */	uint32_t  esp; /* 12 */	uint32_t  ebx; /* 16 */	uint32_t  edx; /* 20 */	uint32_t  ecx; /* 24 */	uint32_t  eax; /* 28 */};extern struct os_entry_regs os_regs;extern struct regs initial_regs;extern unsigned long real_mode_stack;extern void xstart16 P((unsigned long, unsigned long, char *));extern int xstart32(unsigned long entry_point, ...);extern int xstart_lm(unsigned long entry_point, unsigned long params);extern void xend32 P((void));struct Elf_Bhdr *prepare_boot_params(void *header);extern int elf_start(unsigned long machine, unsigned long entry, unsigned long params);extern unsigned long currticks P((void));extern void exit P((int status));/* serial.c */extern int serial_getc P((void));extern void serial_putc P((int));extern int serial_ischar P((void));extern int serial_init P((void));extern void serial_fini P((void));/* floppy.c */extern int bootdisk P((int dev,int part));/***************************************************************************External variables***************************************************************************//* main.c */extern struct rom_info rom;extern char *hostname;extern int hostnamelen;extern jmp_buf restart_etherboot;extern int url_port;extern struct arptable_t arptable[MAX_ARP];extern struct igmptable_t igmptable[MAX_IGMP];#ifdef	IMAGE_MENUextern int menutmo,menudefault;extern unsigned char *defparams;extern int defparams_max;#endif#ifdef	MOTDextern unsigned char *motd[RFC1533_VENDOR_NUMOFMOTD];#endifextern struct bootpd_t bootp_data;#define	BOOTP_DATA_ADDR	(&bootp_data)extern unsigned char *end_of_rfc1533;#ifdef	IMAGE_FREEBSDextern int freebsd_howto;#define FREEBSD_KERNEL_ENV_SIZE 256extern char freebsd_kernel_env[FREEBSD_KERNEL_ENV_SIZE];#endif/* bootmenu.c *//* osloader.c *//* created by linker */extern char _virt_start[], _text[], _etext[], _text16[], _etext16[];extern char _data[], _edata[], _bss[], _ebss[], _end[];/* * Local variables: *  c-basic-offset: 8 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -