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

📄 etherboot.h

📁 linux下从网卡远程启动
💻 H
字号:
/* *	Info we need to know from Etherboot */#define	MKNBI_VERSION		"mknbi-" VERSION#define	ESC			'\033'#define	TICKS_PER_SEC		18#define ETH_ALEN		6	/* Size of Ethernet address */#define ETH_HLEN		14	/* Size of ethernet header */#define	ETH_ZLEN		60	/* Minimum packet */#define	ETH_FRAME_LEN		1514	/* Maximum packet */#ifndef	ETH_MAX_MTU#define	ETH_MAX_MTU		(ETH_FRAME_LEN-ETH_HLEN)#endiftypedef struct {	unsigned long	s_addr;} in_addr;#define DHCP_OPT_LEN		312/* Vendor magic cookies in host order */#define	RFC_1048	0x63538263#define	VEND_CMU	0x00554D43#define	VEND_STAN	0x4E415453#define	VEND_EB		0x687445E4	/* 銭th */#define TAG_LEN(p)		(*((p)+1))#define RFC1533_PAD		0	/* tag for NO-OP */#define RFC1533_NETMASK		1	/* tag for netmask */#define RFC1533_GATEWAY		3	/* tag for gateway */#define RFC1533_HOSTNAME	12	/* tag for host name */#define RFC1533_ROOTPATH	17	/* tag for root directory */#define RFC1533_VENDOR_MAJOR	0#define RFC1533_VENDOR_MINOR	0#define RFC1533_VENDOR_MAGIC	128	/* Etherboot identification */#define RFC1533_VENDOR_ADDPARM	129	/* Addition to kernel command line */#define RFC1533_VENDOR_ETHDEV	130	/* Device by which to find root FS */#define	RFC1533_VENDOR_ETHERBOOT_ENCAP	150#define	RFC1533_VENDOR_MENUOPTS	160#define RFC1533_VENDOR_SELECTION	176	/* index to user selected image */#define RFC1533_VENDOR_MOTD	184#define RFC1533_VENDOR_NUMOFMOTD	8#define RFC1533_VENDOR_IMG	192#define	RFC1533_VENDOR_NUMOFIMG	16#define RFC1533_END		255	/* tag for end of record */#define MAX_BOOTP_EXTLEN	(ETH_MAX_MTU-sizeof(struct bootpip_t))struct iphdr {	char verhdrlen;	char service;	unsigned short len;	unsigned short ident;	unsigned short frags;	char ttl;	char protocol;	unsigned short chksum;	in_addr src;	in_addr dest;};struct udphdr {	unsigned short src;	unsigned short dest;	unsigned short len;	unsigned short chksum;};#define	BOOTP_REPLY	2struct bootp_t {	char bp_op;	char bp_htype;	char bp_hlen;	char bp_hops;	unsigned long bp_xid;	unsigned short bp_secs;	unsigned short unused;	in_addr bp_ciaddr;	in_addr bp_yiaddr;	in_addr bp_siaddr;	in_addr bp_giaddr;	char bp_hwaddr[16];	char bp_sname[64];	char bp_file[128];	char bp_vend[DHCP_OPT_LEN];};/* Format of a bootp IP packet */struct bootpip_t{	struct iphdr ip;	struct udphdr udp;	struct bootp_t bp;};/* Format of bootp packet with extensions */struct bootpd_t {	struct bootp_t bootp_reply;	unsigned char  bootp_extension[MAX_BOOTP_EXTLEN];};struct segoff{	unsigned short	offset, segment;};struct imgheader{	unsigned long	magic;	unsigned long	length;	struct segoff	location;	struct segoff	execaddr;};#define	TAG_MAGIC	0x1B031336	/* Little endian *//* ELF */#define EI_NIDENT	16	/* Size of e_ident array. *//* Values for e_type. */#define ET_NONE		0	/* No file type */#define ET_REL		1	/* Relocatable file */#define ET_EXEC		2	/* Executable file */#define ET_DYN		3	/* Shared object file */#define ET_CORE		4	/* Core file *//* Values for e_machine (incomplete). */#define EM_386		3	/* Intel 80386 */#define EM_486		6	/* Intel i486 *//* Values for p_type. */#define PT_NULL		0	/* Unused entry. */#define PT_LOAD		1	/* Loadable segment. */#define PT_DYNAMIC	2	/* Dynamic linking information segment. */#define PT_INTERP	3	/* Pathname of interpreter. */#define PT_NOTE		4	/* Auxiliary information. */#define PT_SHLIB	5	/* Reserved (not used). */#define PT_PHDR		6	/* Location of program header itself. *//* Values for p_flags. */#define PF_X		0x1	/* Executable. */#define PF_W		0x2	/* Writable. */#define PF_R		0x4	/* Readable. *//* * ELF definitions common to all 32-bit architectures. */typedef unsigned int	Elf32_Addr;typedef unsigned short	Elf32_Half;typedef unsigned int	Elf32_Off;typedef int		Elf32_Sword;typedef unsigned int	Elf32_Word;typedef unsigned int	Elf32_Size;/* * ELF header. */typedef struct {	unsigned char	e_ident[EI_NIDENT];	/* File identification. */	Elf32_Half	e_type;		/* File type. */	Elf32_Half	e_machine;	/* Machine architecture. */	Elf32_Word	e_version;	/* ELF format version. */	Elf32_Addr	e_entry;	/* Entry point. */	Elf32_Off	e_phoff;	/* Program header file offset. */	Elf32_Off	e_shoff;	/* Section header file offset. */	Elf32_Word	e_flags;	/* Architecture-specific flags. */	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */	Elf32_Half	e_phentsize;	/* Size of program header entry. */	Elf32_Half	e_phnum;	/* Number of program header entries. */	Elf32_Half	e_shentsize;	/* Size of section header entry. */	Elf32_Half	e_shnum;	/* Number of section header entries. */	Elf32_Half	e_shstrndx;	/* Section name strings section. */} Elf32_Ehdr;#define	ELF_MAGIC	0x464C457FL	/* e_ident[0:3], little-endian */union infoblock{	unsigned char		c[512];	struct imgheader	img;	Elf32_Ehdr		ehdr;};/* We use ELF names for some members to reduce ifdefs in first32.c */struct segment{	unsigned char	lengths;	unsigned char	tagnum;	unsigned char	mbz;	unsigned char	flags;	unsigned long	p_paddr;	unsigned long	seglength;	unsigned long	p_filesz;};enum segflags { F_ABS = 0, F_INCR = 1, F_EOM = 2, F_DECR = 3, F_FINAL = 4 };/* * ELF Program header. */typedef struct {	Elf32_Word	p_type;		/* Entry type. */	Elf32_Off	p_offset;	/* File offset of contents. */	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */	Elf32_Addr	p_paddr;	/* Physical address. */	Elf32_Size	p_filesz;	/* Size of contents in file. */	Elf32_Size	p_memsz;	/* Size of contents in memory. */	Elf32_Word	p_flags;	/* Access permission flags. */	Elf32_Size	p_align;	/* Alignment in memory and file. */} Elf32_Phdr;/* These are determined by mknbi.pl. If that changes, so must this. */enum linuxsegments { S_FIRST = 0, S_PARAMS, S_BOOT, S_SETUP, S_KERNEL,	S_RAMDISK, S_NOTE, S_END };struct bootblock{	unsigned char	fill1[0x20];	unsigned short	cl_magic;	/* command line magic number */	unsigned short	cl_offset;	/* command line offset */	unsigned char	fill2[0x1FA-0x24];	short		vgamode;};#define CL_MAGIC	0xA33F		/* very unusual command sequence */struct setupblock{	unsigned char	jump[2];	/* jump instruction */	unsigned char	su_magic[4];	/* HdrS */	unsigned short	su_version;	/* >= 0x0201 */	unsigned char	fill[8];	/* realmode_switch, start_sys_seg					   kernel_version */	unsigned char	su_type;	/* type of loader */	unsigned char	su_load_flags;	unsigned short	su_move_size;	unsigned long	su_32_start;	unsigned long	su_ramdisk_start;	unsigned long	su_ramdisk_size;	unsigned short	su_bootsect_kludge[2];	unsigned short	su_heap_end_ptr;	unsigned short	su_pad;	unsigned char	*su_cmd_line_ptr;/* new cmd line protocol used when					   su_version >= 0x202 */	unsigned long	ramdisk_max;	/* highest safe address for the					   contents of an initrd					   su_version >= 0x203 */};#define	SU_MY_LOADER_TYPE	0x41struct ebinfo {	unsigned char	major, minor;	unsigned short	flags;};struct e820entry {	unsigned long long addr;	unsigned long long size;	unsigned long 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};#define E820MAX 32struct meminfo {	unsigned short basememsize;	unsigned int memsize;	int map_count;	struct e820entry map[E820MAX];};extern struct meminfo meminfo;extern void get_memsizes(void);

⌨️ 快捷键说明

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