diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-09-25 16:25:20 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-09-25 16:25:20 -0700 |
commit | a79db9318926d56de2fc1026910806a4c4534569 (patch) | |
tree | 0a3bb4064d6dab25f98799be516b6d9c547ccfb6 /gpxe | |
parent | 400e2b589e6d0bdd9efee9369feb7d5f5e0958d6 (diff) | |
download | syslinux-a79db9318926d56de2fc1026910806a4c4534569.tar.gz |
gPXE: remove the gPXE contrib directory
Remove the gPXE contrib directory. We don't use it, and it causes
trouble with rpmbuild due to .spec files.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'gpxe')
152 files changed, 0 insertions, 20354 deletions
diff --git a/gpxe/contrib/3c90xutil/Makefile b/gpxe/contrib/3c90xutil/Makefile deleted file mode 100644 index 1dd1723f..00000000 --- a/gpxe/contrib/3c90xutil/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -FILES = cromutil bromutil - -INCLUDEDIR = /usr/include -CFLAGS = -O2 -fomit-frame-pointer -Wall -I$(INCLUDEDIR) - -all: $(FILES) - -clean: - rm -f $(FILES) *~ core diff --git a/gpxe/contrib/3c90xutil/README b/gpxe/contrib/3c90xutil/README deleted file mode 100644 index 235530f6..00000000 --- a/gpxe/contrib/3c90xutil/README +++ /dev/null @@ -1,31 +0,0 @@ -This utility was apparently writen by John Finlay and came to me -via Richard Schroeder who got it from Greg Beeley. John, if you want -to be credited with your full address or whatever in the Etherboot -documentation, please contact me (Etherboot maintainer). - -1/18/2000 Marty Connor (mdc@thinguin.org) added code for the 3C905C -with AT49BV512 Flash memory, and created cromutil and bromutil to -differentiate the versions. cromutil is for 3C905C and bromutil is -for 3C905B. - -Be careful. You can easily erase your Flash memory using these -utilities. Make *sure* to back them up first using the "read" -command. You must "erase" before using "prog" to program the chip with -Etherboot code. This code comes with NO WARRANTY, and you take sole -responsibility and liability for whatever it does. Read the -"romutil.txt" file for more information on commands. - -That being said, if you are programming a 3C905C-TXM (for example) -you would do something like this: - - $ cd etherboot-x.x.x/contrib - $ tar -zxvf n3c905xutil.tar.gz - $ cd n3c905xutil - $ make - # replace 0x6600 with whatever the IO Addr for your card is!!!! - $ ./cromutil 0x6600 read > 905cbackup.bin - $ ./cromutil 0x6600 erase - $ ./cromutil 0x6600 prog < 3c90x.lzrom - -You should now have an Etherboot-enabled 3c905C-TXM. - diff --git a/gpxe/contrib/3c90xutil/bromutil.c b/gpxe/contrib/3c90xutil/bromutil.c deleted file mode 100644 index a736e5af..00000000 --- a/gpxe/contrib/3c90xutil/bromutil.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * readutil.c - perform various control ops on the 3c509b bios rom - * - */ - -#ifndef __i386__ -# error "This program can't compile or run on non-intel computers" -#else - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#ifdef __FreeBSD__ - -#include <fcntl.h> -#include <machine/cpufunc.h> - -#define OUTB(data, port) outb(port, data) -#define OUTW(data, port) outw(port, data) -#define OUTL(data, port) outl(port, data) - -#else - -#include <sys/io.h> - -#define OUTB(data, port) outb(data, port) -#define OUTW(data, port) outw(data, port) -#define OUTL(data, port) outl(data, port) - -#endif - -int main(int argc, char **argv) -{ - unsigned int i, j, n; - unsigned int ioaddr; - unsigned long recvrstat; - unsigned char buf[128]; - unsigned char b; - - if (argc != 3) { - printf("Usage: romid ioaddr [erase|protect|unprotect|id|read >file|prog <file]\n"); - exit(-1); - } - -#ifdef __FreeBSD__ - /* get permissions for in/out{blw} */ - open("/dev/io",O_RDONLY,0); -#else - setuid(0); /* if we're setuid, do it really */ - if (iopl(3)) { - perror("iopl()"); - exit(1); - } -#endif - - sscanf(argv[1],"%x",&ioaddr); - /* Set the register window to 3 for the 3c905b */ - OUTW(0x803, ioaddr+0xe); - recvrstat = inl(ioaddr); /* save the receiver status */ - /* set the receiver type to MII so the full bios rom address space - can be accessed */ - OUTL((recvrstat & 0xf00fffff)|0x00600000, ioaddr); - - /* Set the register window to 0 for the 3c905b */ - OUTW(0x800, ioaddr+0xe); - - if (strcmp(argv[2], "erase") == 0) { - /* do the funky chicken to erase the rom contents */ - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0x80, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0x10, ioaddr+0x8); - printf("Bios ROM at %04x has been erased\n", ioaddr); - } else if (strcmp(argv[2], "protect") == 0) { - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0xa0, ioaddr+0x8); - printf("Software Data Protection for Bios ROM at %04x has been enabled\n", - ioaddr); - } else if (strcmp(argv[2], "unprotect") == 0) { - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0x80, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0x20, ioaddr+0x8); - printf("Software Data Protection for Bios ROM at %04x has been disabled\n", - ioaddr); - } else if (strcmp(argv[2], "id") == 0) { - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0x90, ioaddr+0x8); - /* 10ms delay needed */ - printf("Manufacturer ID - "); - /* manuf. id */ - OUTL(0x0000, ioaddr+0x4); - printf("%02x\n", inb(ioaddr+0x8)); - /* device id */ - OUTL(0x0001, ioaddr+0x4); - printf("Device ID - %02x\n", inb(ioaddr+0x8)); - /* undo the funky chicken */ - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0xf0, ioaddr+0x8); - } else if (strcmp(argv[2], "read") == 0) { - for (i = 0; i < 65536; i++) { - OUTL(i, ioaddr+0x4); - b = inb(ioaddr+0x8); - write(1, &b, 1); - } - } else if (strcmp(argv[2], "prog") == 0) { - /* program the rom in 128 bute chunks */ - for (i = 0, n = 0; i < 65536; i += n) { - n = read(0, buf, 128); - if (n == 0) - break; - if (n < 0) { - perror("File Error"); - exit(-3); - } - /* disable SDP temporarily for programming a sector */ - OUTL(0x5555, ioaddr+0x4); - OUTB(0xaa, ioaddr+0x8); - OUTL(0x2aaa, ioaddr+0x4); - OUTB(0x55, ioaddr+0x8); - OUTL(0x5555, ioaddr+0x4); - OUTB(0xa0, ioaddr+0x8); - for (j = 0; j < n; j++) { - OUTL(i+j, ioaddr+0x4); - OUTB(buf[j], ioaddr+0x8); - } - /* wait for the programming of this sector to coomplete */ - while (inb(ioaddr+0x8) != buf[j-1]) - ; - } - } - - /* Set the register window to 3 for the 3c905b */ - OUTW(0x803, ioaddr+0xe); - /* restore the receiver status */ - OUTL(recvrstat, ioaddr); - return 0; -} - -#endif /* __i386__ */ diff --git a/gpxe/contrib/3c90xutil/cromutil.c b/gpxe/contrib/3c90xutil/cromutil.c deleted file mode 100644 index d4751fbf..00000000 --- a/gpxe/contrib/3c90xutil/cromutil.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 3c905cutil.c - perform various control ops on the 3C905C bios rom - * which we assume to be an AT49BV512 - * - */ - -#ifndef __i386__ -# error "This program can't compile or run on non-intel computers" -#else - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/io.h> - -int main(int argc, char **argv) -{ - unsigned int ioaddr, i, n; - unsigned char b; - - setuid(0); /* if we're setuid, do it really */ - if (argc != 3) { - printf("Usage: romid ioaddr [erase|id|read >file|prog <file]\n"); - exit(-1); - } - if (iopl(3)) { - perror("iopl()"); - exit(1); - } - sscanf(argv[1],"%x",&ioaddr); - - /* Set the register window to 0 for the 3C905C */ - outw(0x800, ioaddr+0xe); - - if (strcmp(argv[2], "erase") == 0) { - /* do the funky chicken to erase the rom contents */ - outl(0x5555, ioaddr+0x4); - outb(0xaa, ioaddr+0x8); - outl(0x2aaa, ioaddr+0x4); - outb(0x55, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0x80, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0xaa, ioaddr+0x8); - outl(0x2aaa, ioaddr+0x4); - outb(0x55, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0x10, ioaddr+0x8); - sleep (1); - printf("Bios ROM at %04x has been erased\n", ioaddr); - } else if (strcmp(argv[2], "id") == 0) { - outl(0x5555, ioaddr+0x4); - outb(0xaa, ioaddr+0x8); - outl(0x2aaa, ioaddr+0x4); - outb(0x55, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0x90, ioaddr+0x8); - /* 10ms delay needed */ - printf("Manufacturer ID - "); - /* manuf. id */ - outl(0x0000, ioaddr+0x4); - printf("%02x\n", inb(ioaddr+0x8)); - /* device id */ - outl(0x0001, ioaddr+0x4); - printf("Device ID - %02x\n", inb(ioaddr+0x8)); - /* undo the funky chicken */ - outl(0x5555, ioaddr+0x4); - outb(0xaa, ioaddr+0x8); - outl(0x2aaa, ioaddr+0x4); - outb(0x55, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0xf0, ioaddr+0x8); - } else if (strcmp(argv[2], "read") == 0) { - for (i = 0; i < 65536; i++) { - outl(i, ioaddr+0x4); - b = inb(ioaddr+0x8); - write(1, &b, 1); - } - } else if (strcmp(argv[2], "prog") == 0) { - for (i = 0; i < 65536; i++) { - n = read(0, &b, 1); - if (n == 0) - break; - if (n < 0) { - perror("File Error"); - exit(-3); - } - outl(0x5555, ioaddr+0x4); - outb(0xaa, ioaddr+0x8); - outl(0x2aaa, ioaddr+0x4); - outb(0x55, ioaddr+0x8); - outl(0x5555, ioaddr+0x4); - outb(0xA0, ioaddr+0x8); - outl(i, ioaddr+0x4); - outb(b, ioaddr+0x8); - while (inb(ioaddr+0x8) != b) - ; - } - } - return 0; -} - -#endif /* __i386__ */ diff --git a/gpxe/contrib/3c90xutil/romutil.txt b/gpxe/contrib/3c90xutil/romutil.txt deleted file mode 100644 index 58074b9b..00000000 --- a/gpxe/contrib/3c90xutil/romutil.txt +++ /dev/null @@ -1,36 +0,0 @@ -I wrote the attached little util program to try out the basic approach -and thought that you might find it useful as well as providing some -simple testing. It isn't a final solution so the interface is rough. The -program must be run as root on an Intel based machine. - -The key point is that the IO address needs to be entered - I grab it -from the dmesg output: - -eth0: 3Com 3c905B Cyclone 100baseTx at 0xe400, 00:10:4b:d2:5e:0d, IRQ -11 - -or "cat /proc/pci" to find the "I/O at XXXXXX" for your 3Com Card. - -Some example commands are: - -romutil 0xe400 erase - erases the ROM contents -romutil 0xe400 protect - enables the Software Data Protection -on the ROM [3c905B only] -romutil 0xe400 unprotect - disables the Software Data Protection -on the ROM [3c905B only] -romutil 0xe400 id - displays the manufacturer and -device IDs -romutil 0xe400 read >file - writes the contents of the ROM to stdout -romutil 0xe400 prog <file - writes the contents of the stdin into the -ROM (<64k) - -I tried reading and writing the ROM while doing large ftp transfers and -experienced no problems. I didn't spend much time worrying about the -possible race conditions. My system has lots of resources (450MHx P2, -128MB RAM) so it might not provide the best test candidate. - -Let me know what results you get if you try it out. - -Thanks - -John diff --git a/gpxe/contrib/Diskless-From-NT/Config.txt b/gpxe/contrib/Diskless-From-NT/Config.txt deleted file mode 100644 index 60385fb7..00000000 --- a/gpxe/contrib/Diskless-From-NT/Config.txt +++ /dev/null @@ -1,537 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_X86=y -CONFIG_ISA=y -# CONFIG_SBUS is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# Processor type and features -# -CONFIG_M386=y -# CONFIG_M486 is not set -# CONFIG_M586 is not set -# CONFIG_M586TSC is not set -# CONFIG_M586MMX is not set -# CONFIG_M686 is not set -# CONFIG_M686FXSR is not set -# CONFIG_MPENTIUM4 is not set -# CONFIG_MK6 is not set -# CONFIG_MK7 is not set -# CONFIG_MCRUSOE is not set -# CONFIG_MWINCHIPC6 is not set -# CONFIG_MWINCHIP2 is not set -# CONFIG_MWINCHIP3D is not set -# CONFIG_X86_CMPXCHG is not set -CONFIG_X86_L1_CACHE_SHIFT=4 -# CONFIG_TOSHIBA is not set -# CONFIG_MICROCODE is not set -# CONFIG_X86_MSR is not set -# CONFIG_X86_CPUID is not set -CONFIG_NOHIGHMEM=y -# CONFIG_HIGHMEM4G is not set -# CONFIG_HIGHMEM64G is not set -CONFIG_MATH_EMULATION=y -CONFIG_MTRR=y -# CONFIG_SMP is not set -# CONFIG_X86_UP_IOAPIC is not set - -# -# General setup -# -CONFIG_NET=y -# CONFIG_VISWS is not set -CONFIG_PCI=y -# CONFIG_PCI_GOBIOS is not set -# CONFIG_PCI_GODIRECT is not set -CONFIG_PCI_GOANY=y -CONFIG_PCI_BIOS=y -CONFIG_PCI_DIRECT=y -# CONFIG_PCI_NAMES is not set -CONFIG_EISA=y -# CONFIG_MCA is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -# CONFIG_PCMCIA is not set -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_MISC=m -CONFIG_PM=y -# CONFIG_ACPI is not set -# CONFIG_APM is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Parallel port support -# -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_AMIGA is not set -# CONFIG_PARPORT_MFC3 is not set -# CONFIG_PARPORT_ATARI is not set -# CONFIG_PARPORT_SUNBPP is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -CONFIG_BLK_DEV_FD=m -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Telephony Support -# -# CONFIG_PHONE is not set - -# -# ATA/IDE/MFM/RLL support -# -# CONFIG_IDE is not set -# CONFIG_BLK_DEV_IDE_MODES is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set -CONFIG_NET_ISA=y -# CONFIG_E2100 is not set -# CONFIG_EEXPRESS is not set -# CONFIG_EEXPRESS_PRO is not set -# CONFIG_HPLAN_PLUS is not set -# CONFIG_HPLAN is not set -# CONFIG_ETH16I is not set -CONFIG_NE2000=y -# CONFIG_SK_G16 is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Old CD-ROM drivers (not SCSI, not IDE) -# -# CONFIG_CD_NO_IDESCSI is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_SERIAL=y -# CONFIG_SERIAL_CONSOLE is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -# CONFIG_PPDEV is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# - -# -# Game port support -# - -# -# Gameport joysticks -# - -# -# Serial port support -# - -# -# Serial port joysticks -# - -# -# Parallel port joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -CONFIG_AGP=m -CONFIG_AGP_INTEL=y -CONFIG_AGP_I810=y -CONFIG_AGP_VIA=y -# CONFIG_AGP_AMD is not set -# CONFIG_AGP_SIS is not set -# CONFIG_AGP_ALI is not set -# CONFIG_DRM is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -CONFIG_DEVFS_FS=y -CONFIG_DEVFS_MOUNT=y -# CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_SMB_NLS is not set -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_VGA_CONSOLE=y -# CONFIG_VIDEO_SELECT is not set -# CONFIG_MDA_CONSOLE is not set - -# -# Frame-buffer support -# -# CONFIG_FB is not set - -# -# Sound -# -CONFIG_SOUND=m -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -CONFIG_SOUND_ES1371=m -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -CONFIG_SOUND_VIA82CXXX=m -CONFIG_SOUND_OSS=m -# CONFIG_SOUND_TRACEINIT is not set -# CONFIG_SOUND_DMAP is not set -# CONFIG_SOUND_AD1816 is not set -# CONFIG_SOUND_SGALAXY is not set -# CONFIG_SOUND_ADLIB is not set -# CONFIG_SOUND_ACI_MIXER is not set -# CONFIG_SOUND_CS4232 is not set -# CONFIG_SOUND_SSCAPE is not set -# CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_VMIDI is not set -# CONFIG_SOUND_TRIX is not set -# CONFIG_SOUND_MSS is not set -# CONFIG_SOUND_MPU401 is not set -# CONFIG_SOUND_NM256 is not set -# CONFIG_SOUND_MAD16 is not set -# CONFIG_SOUND_PAS is not set -# CONFIG_SOUND_PSS is not set -CONFIG_SOUND_SB=m -# CONFIG_SOUND_AWE32_SYNTH is not set -# CONFIG_SOUND_WAVEFRONT is not set -# CONFIG_SOUND_MAUI is not set -CONFIG_SOUND_YM3812=m -# CONFIG_SOUND_OPL3SA1 is not set -# CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMPCI is not set -# CONFIG_SOUND_YMFPCI is not set -# CONFIG_SOUND_UART6850 is not set -# CONFIG_SOUND_AEDSP16 is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -# CONFIG_MAGIC_SYSRQ is not set diff --git a/gpxe/contrib/Diskless-From-NT/Diskless-From-NT.txt b/gpxe/contrib/Diskless-From-NT/Diskless-From-NT.txt deleted file mode 100644 index 54c2b746..00000000 --- a/gpxe/contrib/Diskless-From-NT/Diskless-From-NT.txt +++ /dev/null @@ -1,565 +0,0 @@ - - -The Diskless Terminal running from NT server Mini-HOWTO -Pavel Tkatchouk, ptkatcho@portal.ca -v0.1, June 19th 1999 - -Table of Contents - -1. Introduction. - - 1.1 What is it for? - 1.2 Do we need this HOWTO? - 1.3 A bit of History. - -2. Project description. - - 2.1 Packaging. - 2.2 Image. - 2.2.1 Kernel. - 2.2.2 MRFS. - 2.2.3 Building MRFS. - 2.3 Remotefs. - 2.4 Booting sequence. - 2.4.1 BOOTP, TFTP. - 2.5 Bootprom. - -3. Resources. - -4. Copyright. - -5. Feedback and credits. - - -1. Introduction. - - -1.1. What is it for? - -This document describes how to build software distribution to run Java client on diskless -terminal booted from Microsoft Windows 95/98/NT workstation. Package can also be easily -modified to be used as Linux terminal or X Windows terminal's software. I found it also -convenient for setup over the Ethernet of floppyless PS's, hard disk of which for some -reason can not be accessed (sealed case under warranty, etc.). - - -1.2. Do we need this HOWTO? - -To be honest, I'm not sure. There are few excellent HOWTO's (see 3. Recources) that up until -recently I considered quite sufficient to build what I've done two years ago. But since my -project uses MS Windows as a file server vs. traditional NFS there were some know-how's -involved which number of people wanted to see in some formal document. - - -1.3. A bit of history. - -My project at that time (1996) was to find OS/JVM that will allow to run Java application -on hardware we manufacture. Hardware is practically generic x86 PC except it has no keyboard, -hard drive, floppy drive, mouse, but touchscreen over LCD, plus some POS specific peripherals -(badge reader, credit card reader, etc.). Due to cost consideration it had no any significant -storage, so OS and Java client along with support binaries, libraries etc. had to be loaded -remotely. Because our clients are exclusively Windows shops, Server had to be Windows as well. -During evaluation of different commercial OS'es along with JVM's available it become apparent -to my surprise that most promising solution was GPL one - Linux. - - -2. Project description. - -2.1. Packaging. - -The whole distribution consists of remote file system (RemoteFS) residing on MS Windows -server (NT Workstation, NT Server or Windows9x) and tagged bootable image. - - -2.2. Image. - -Image (~1.5MB) is generated by mknbi utility that comes with Etherboot package -<http://etherboot.sourceforge.net>. It can include minimal root file system (MRFS) -like in my case (since I had to boot client from MS Windows server and Linux kernel doesn't -support SMBFS-Root, only NFS-Root. So I had to keep rootfs in the ramdisk). To generate -image the following script can be used. - -#!/bin/sh -# mkrootnet: makes tagged netbootable image -# This image includes kernel and minimal root filesystem -# to do initial boot. -# -# Copyright (c) Pavel Tkatchouk 1996. All rights reserved. -# Permission is granted for this material to be freely -# used and distributed, provided the source is acknowledged. -# No warranty of any kind is provided. You use this material -# at your own risk. -# -DEVICEFILENAME="/tmp/file" # temporary file to be used as device -FSBLOCKS=4096 # uncompressed filesystem size in K -BOOTDISKDIR="/usr/BOOT/ROOTFS" # root filesystem model -MOUNT="/mnt2" # temporary mount point -ROOTFS="/tmp/rootfs" # root filesystem image -ROOTFSGZ="/tmp/rootfs.gz" # compressed root filesystem image -KERNEL="/usr/KERNELS/vmlinuz-nt" # kernel image -KERNELTMP="/tmp/vmlinuz" # temporary copy of kernel image -BOOTIMAGE="/tmp/img" # tagged image to be booted by client -# if you want ramisk more than default 4096 set CMDLINE, don't forget to -# adjust $FSBLOCKS -# CMDLINE="ramdisk_size=8192" # parameters to pass to the kernel -# -echo "check:" -echo "- if tftp server's download dir mounted to /mnt" -echo "- loopback device is built-in or loaded" -echo "\n press Enter when done" -read tmp -UPLOAD="/mnt/tmp" # tftp server's dir to upload bootimage -echo -e "\nZeroing $DEVICEFILENAME of $FSBLOCKS k" -echo "to be used as device for root filesystem model" -dd if=/dev/zero of=$DEVICEFILENAME bs=1k count=$FSBLOCKS -echo -e "\nMaking file system on $DEVICEFILENAME" -mke2fs -m 0 $DEVICEFILENAME -echo "Mounting $DEVICEFILENAME as a loopback device" -mount -o loop -t ext2 $DEVICEFILENAME $MOUNT -curdir=`pwd` -cd $BOOTDISKDIR -echo -e "Copying files from $BOOTDISKDIR to $DEVICEFILENAME, please wait" -find . -print|cpio -pmd $MOUNT -echo "Unmounting $MOUNT" -umount $MOUNT -cd $curdir -echo "Copying $DEVICEFILENAME to $ROOTFS" -dd if=$DEVICEFILENAME of=$ROOTFS bs=1k -echo "Compressing $ROOTFS, it may take a while" -echo "Please wait..." -if [ -f $ROOTFSGZ ];then - rm -f $ROOTFSGZ -fi -gzip -c $ROOTFS>$ROOTFSGZ -rm -f $ROOTFS -echo -e "\nCreating netbootable image" -cp $KERNEL $KERNELTMP -mknbi -d ram -i rom -r $ROOTFSGZ -k $KERNELTMP -a $CMDLINE -o $BOOTIMAGE -echo "Uploading $BOOTIMAGE to $UPLOAD" -cp $BOOTIMAGE $UPLOAD -echo "Cleaning after ourselves" -rm -f $KERNELTMP $DEVICEFILENAME $BOOTIMAGE -echo "All done" - - -In the above script actual image is generated by the following comand - -#mknbi -d ram -i rom -r rootfs.gz -k vmlinuz-nt -o img - -where: - rootfs.gz - minimal root file system (MRFS); - vmlinuz-nt - kernel; - img - resulting image. - - -Note: -Default ramdisk size is 4096. It was enough for RedHat4.1 based minimal file system, but -apparently not enough for 5.2 based. When this happens "end request:I/O error, dev 01:00 ..." -error shows up. To fix that either use "mknbi -a ramdisk_size=8192" to pass parameter to the -kernel (doesn't require kernel recompilation), or change /usr/src/linux/drivers/block/rd.c: -int rd_size= from 4096 to 8192 or whatever and rebuild the kernel. - - -2.2.1. Kernel. - -Kernels 2.0.30 and 2.0.36 have been used by author, although nothing is preventing you from -experimenting with others. Kernel should include ramdisk support. The following -<link to .config> configuration has been used to build <link to binary (kernel 2.0.30)>. -You may find some components unnecessary, just exclude them and rebuild. - -Don't forget to change root device after you built the kernel (rdev vmlinuz /dev/rd). - -Gotcha's: apparently smbfs is broken in 2.2.x kernels. Symptoms: remote share is mounted -just fine but after a while fails with "smb_request: result = -32" errmsg. I've heard -SuSe has fix for that. - -2.2.2. MRFS. - -Minimal root file system is required to get Linux up and running along with networking until -it can mount remote file system to run X/Java from there. After image gets loaded from the -server MRFS is decompressed into ramdisk. If you can afford a lot of ram on your terminal the -entire remote file system can be moved to rootfs.gz. That will make your terminal more -responsive. - - -2.2.3. Building MRFS. - -Some folks found it easier to start from scratch, others use known "minimal" Linux distributions -(Linux Router, tomsrtbt, etc.), yet others prefer to start from "big" Linuces like I did. Every -path has it's pro and contras. - -Pruning standard distribution (RedHat, Debian, etc.) to your needs might be very time consuming. -To ease that painful process I have used remotely booted diskless client with NFS-Root (see -Etherboot's Readme, NFS-Root and NFS-Root-Client mini-HOWTO's, Diskless-HOWTO): - -- setup minimal RedHat4.1 install (networked workstation, X, no development, mail, etc., ~117MB); -- find . -print|cpio -pmd /usr/NFS/ROOTFS - copy entire fs tree to NFS exported dir; -- mknod /usr/NFS/ROOTFS/dev/nfsroot b 0 255; -- build vmlinuz-nfs kernel according to NFS-Howto (built-in bootp,rarp,NFS,NFS root,NIC - driver,RAM disk); -- rdev vmlinuz-nfs /dev/nfsroot - to set NFS root device; -- build image for NFS-Root fs: - #mknbi -d rom -i rom -k vmlinuz-nfs -o nfsImage; -- boot client while monitoring NFS file requests (by Solaris snoop); -- copy files from /usr/NFS/ROOTFS to /usr/BOOT/ROOTFS (MRFS model) according to snoop's - filelist; -- generate image by mkrootnet script (don't forget to point to the right kernel vmlinuz-nt). - -The above trick not only allows to determine the sought files set but also debug boot process -analyzing NFS messages. I found it convenient to put "read tmp" statements into init scripts -for debugging. Tracking files up until issuing login gives you <link to rootfs.gz> MRFS (~1MB) -that can be used to boot Linux from ROM (flash, eprom, DiskOnChip, SanDisk, etc.) as well. All -the other files requested by client (during starting X, Java, Java client) were put into (link -to remotefs.zip, ~9MB). - - -To restore MRFS model on your PC from the above rootfs.gz: -- #cd /tmp -- #gunzip rootfs.gz -- #mount -o loop -t ext2 /tmp/rootfs /mnt -- #cd /mnt -- #find . -print|cpio -pmd /usr/BOOT/ROOTFS -- #umount /mnt - -Note: - -You will have to change attributes of some dirs, files (/etc/mtab, /etc/mtab~, /var/lock/subsys/*, -/var/run/*, /dev/tty*, etc.) against standard. This is because with standard attribs diskless -client refused to work. For example I had to change /dev/tty* ownerships to 99:99 from original -0:0 or 0:5, to get rid of errmsg "INIT: Id "1" respawning too fast: disabled for 5 minutes". -Being admin illiterate I just chmod them to 777 and chown to 99:99 to make life easier. -THIS IS SERIOUS SECURITY VIOLATION!!! Using keyboardless terminal with no daemons running in -my case reduces the risk, yet I would appreciate very much those more experienced who will help -to restore the right attribs while keeping the distribution working. - -Some "gotcha's" to watch for during MRFS building: -- standard attributes/ownership of some files don't work; -- rdev must be set (non-tagged image didn't work, so couldn't use config file to pass parrs - to the kernel); -- diskless client writes 99:99 ownership on generated files; -- "password incorrect" for root, but any other OK and su OK too. - - -2.3. RemoteFS. - -Remotefs.zip file includes everything required by the system that can be located on -remote file system, i.e after booting has been complete and remote file system mounted. -In my case it is X Windows System and Java binaries, libraries etc. To use that file on -MS Windows NT: -- unzip remotefs.zip to some directory; -- share this directory read-only as "usr" (or share as some other name and pass this name to - the client through bootptab configuration file for BOOTP server; -- create an account username=root, password=linux on NT (can be set in bootptab). - -Note: -There's no symbolic links on NTFS, so UNIX links must be replaced by copies on NTFS. -To determine potential troublmakers one could use the following: -- first copy required subset (according to snoop's intercept) from /usr/NFS/ROOTFS to - /usr/BOOT/REMOTEFS; -- mount some share from NTFS to /mnt; -- /usr/BOOT/REMOTEFS#find . -print|cpio -pmd /mnt 2>links; -In the links file you will find names to work with. - - -2.4. Booting sequence. - -Boot occurs in the following sequence: -- bootprom sends bootp request, -- bootp server responds with subnet mask, client's name, client's IP, TFTP server's IP, - bootfile name and some optional parameters (like NT's username/password to use it's share, - you could pass some other share name here as say T104="somedir"); -- bootprom downloads image from TFTP server; -- kernel starts; -- kernel decompresses MRFS in RAM; -- system starts init using ramdisk root, -- mounts remote file system from NT via SMBFS; -- automatically logins; -- starts xstart script located on remotefs (/usr/sbin) where you can start any of your - programs, change parameters, etc. without rebuilding the image. - -Below are some config/init sample files from <rootfs.gz>, <remotefs.zip>: - -<bootptab, change to link> -t1:sm=255.255.255.0:sa=192.168.33.150:bf=img:T100="pavelnt4":T101="root":T102="linux" -touch1:hn=touch1:tc=t1:ha=00A0F00035CD:ip=192.168.33.127 - -</etc/fstab, change to link>: -/dev/ram / ext2 defaults 1 1 -/proc /proc proc defaults 0 0 - -</etc/rc.d/rc.bootp, change to link later>: -#!/bin/sh -# Written to simply set the IP stuff up from the -# bootpc data. -# Last updated : Mon Mar 10 15:17:01 1997 -# -# Variables - -BOOTPC=/sbin/bootpc -IFCONFIG=/sbin/ifconfig -ROUTE=/sbin/route -BINHOST=/bin/hostname -DEV=eth0 -ASKSERVER="255.255.255.255" -TW="--timeoutwait 320" -RIF="--returniffail" -RIFMESSAGE="Bootp failed -- disabling network." -RCONF=/etc/resolv.conf -EHOSTS=/etc/hosts -LHOSTS=/etc/hosts.local -TMPFILE=/tmp/bootp -# Functions -# Remove the networking by taking down the interface -netdown() { - ${ROUTE} del default - ${IFCONFIG} ${DEV} down -} -## End of the functions - -## Start of the actual work -# Bring up minimal networking use 0.0.0.0 as our address as we don't -# know it yet (Means "Me but I don't know my address or network") -${IFCONFIG} ${DEV} up 0.0.0.0 -${ROUTE} add default dev ${DEV} - -# Perform the bootp -- doesn't return unless it gets an answer -if ${BOOTPC} --dev ${DEV} --server ${ASKSERVER} ${RIF} ${TW} > ${TMPFILE} -then -# Take down networking (use the 0.0.0.0 for as short a time as possible) - netdown -# Read in the values - . ${TMPFILE} - -# To use in mountsmb script later -SMBSERVER=${T100} -# And delete the temporary file -# rm ${TMPFILE} -else -# Take down networking (use the 0.0.0.0 for as short a time as possible) - netdown -# give message and quit - echo ${RIFMESSAGE} - exit 1 -fi - -# Start the loopback interface and add a route to it -# It's already set by standard init? -${IFCONFIG} lo 127.0.0.1 -${ROUTE} add -net 127.0.0.0 - -# Setup of IP stuff needs doing first -# -if [ -z "${NETMASK}" ] ; then -# No netmask info, all this is guessed from the IP number -# If this is wrong for your network FIX the bootpd to know -# what it should send in the RFC1497 cookie! 11/02/94 JSP -# - ${IFCONFIG} ${DEV} up ${IPADDR} broadcast ${BROADCAST} - ${ROUTE} -n add -net ${NETWORK} dev ${DEV} -else -# We will have NETMASK, BROADCAST, and NETWORK defined - ${IFCONFIG} ${DEV} up ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK} - ${ROUTE} -n add -net ${NETWORK} dev ${DEV} -fi - -# Set the hostname from what we got via bootp or reverse lookup - -echo "127.0.0.1 loopback localhost">${EHOSTS} -${BINHOST} "${HOSTNAME}" -echo "${IPADDR} ${HOSTNAME}" >>${EHOSTS} -echo "${SERVER} ${SMBSERVER}" >>${EHOSTS} - - -</etc/rc.d/rc.local, change to link>: -#!/bin/sh -# This script will be executed *after* all the other init scripts. -# You can put your own initialization stuff in here if you don't -# want to do the full Sys V style init stuff. -# -# 07/02/97 Pavel Tkatchouk -# -echo "Start networking" -insmod /lib/8390.o -insmod /lib/ne.o io=0x300 irq=9 -echo "Install serial" -insmod /lib/serial.o -echo "Install touch" -insmod /lib/touch.o -echo "Install smbfs" -insmod /lib/smbfs.o -echo "Getting TCP/IP parameters from bootp server" -echo "and start networking" -/etc/rc.d/rc.bootp -if [ -f /etc/squirrel-release ]; then - R=$(cat /etc/squirrel-release) -else - R="release 0.02" -fi -echo "Mounting remote fs" -/sbin/mountsmb -echo "XYZ Inc. Diskless Linux $R" -echo "Starting X and Java client without login" -su -c /sbin/xstart root - - -</usr/sbin/xstart, change to link>: -#!/bin/bash -# -# Script to start X and Java client -# 08/07/97 Pavel Tkatchouk -# -# Read bootps response first -. /tmp/bootp -# -s 0 to disable screen-saver -/usr/X11R6/bin/X -s 0 & -export DISPLAY=:0.0 -# /usr is share mounted from Windows workstation -cd /usr/program/ -java SomeJavaApp - - -</sbin/mountsmb, change to link>: -#!/bin/bash -# mountsmb: mounts remote filesystems from NT workstation -# using Microsoft's SMB protocol -# -# Copyright (c) Pavel Tkatchouk 1997. All rights reserved. -# Permission is granted for this material to be freely -# used and distributed, provided the source is acknowledged. -# No warranty of any kind is provided. You use this material -# at your own risk. -# -# Last edit June 29 8:30 1997 -# -MOUNTDIR="usr" -SHRDIR="usr" -BOOTPRES="/tmp/bootp" -# Read botpc response -. ${BOOTPRES} -# Sharename from NT server, uncomment if you want to use -# non-hardcoded "usr" but from bootptab -#SHRDIR=${T104} -SMBSRV="//${T100}" -CLIENT="${HOSTNAME}" -USER="${T101}" -PASSWORD="${T102}" -echo -e "\nMounting $SMBSRV/$SHRDIR to /$MOUNTDIR" -smbmount $SMBSRV/$SHRDIR $MOUNTDIR -c $CLIENT -U $USER -P $PASSWORD -echo -e "\nDone" - -Gotcha's: -Looks like smbmount client from smbfs package used to mount remote Windows shares to local -Linux dirs in pre 2.2.x era isn't maintained anymore so you should use one coming with -Samba package. Also binary smbmount won't work with 2.2.x, so you have to recompile with -2.2.x headers following Samba's readme. Yet even that won't guarantee reliable work until -somebody fixes kernel's smbfs module. - -2.4.1. BOOTP, TFTP. - -There are number of BOOTP, TFTP servers for Windows on the market. You could find them -here: - -- www.walusoft.co.uk (Walusoft's tftp); -- ftp.coast.net/simtel/nt/internet/tftpds12.zip (Millwood AB's tftp); -- ftp.cabletron.com/pub/snmp/bootftp/boottft2.zip (Cabletron's bootp/tftp combo); -- www.tellurian.au.com (Tellurian's bootp, tftp, dhcp servers). -- www.metainfo.com (Metainfo's DHCP server) -- www.nts.com (Network Telesystems's DHCP server in IPserver package) - -My choice was Tellurian's products - very reliable, simple to install, attractively priced -(fully capable evaluation versions are available). - -2.5. Bootprom. - -Ken Yap's Etherboot <etherboot.sourceforge.net> will tell you everything about bootprom. -Here I just want to mention that normally you would have to put bootprom's code into network -adapter's PROM. But if your hardware like mine has BIOS programmed in flash you could -re-program it to add bootprom (some BIOS requires special programmer to do that, others don't) -as BIOS extension. - -This is what I did to add ne.rom (bootprom generated by Etherboot's makerom for NE2000 clone) -to AMI BIOS on my flash: - -- read flash content by programmer into bios.bin binary file; -- use one of available binary editors (say www.simtel.net/Win95/editors/hxp3005.zip to add - ne.rom to bios.bin (and to edit ne.rom if necessary); -- write new bios.bin back to flash. - -Notes: -- makerom generates bootprom for standard EPROM sizes (8k, 16k, 32k, etc.), so if you tight on - space use -s flag to adjust size (or cut it manually to multiple of 512 bytes blocks, just - don't forget to adjust extension's length which is coded in Byte 2 and checksum to 8 bits - of zero; -- valid absolute addresses for BIOS extensions are from 0xC8000 to 0xF4000 (check with - motherboard's manufacturer how flash is mapped onto system memory space); -- Byte 0 must be 0x55, Byte 1 must be 0xAA, Byte 2 must be extension's length in 512 bytes - blocks; -- extension BIOS has to start at a 2k boundary; - - -3. Resources. - -FAQ's: -- tomsrtbt.FAQ (www.toms.net); - -HOWTO's: -- Paul Moody's miniHOWTO (www.linuxembedded.com/pmhowto.html) -- Diskless; -- Diskless-HOWTO; -- NFS-Root; -- NFS-Root-Client; -- Bootdisk-HOWTO; -- BootPrompt-HOWTO; -- NCD-X-Terminal; -- Remote-Boot; -- Remote-X-Apps; - -Web: -- etherboot.sourceforge.net/ -- www.waste.org/~zanshin -- www.tellurian.com.au. -- www.toms.net -- www.trinux.org -- www.linux.org.uk/ELKS-Home -- www.embedded.com -- www.linuxembedded.com -- www.thinlinux.org -- www.linuxrouter.org -- linux-mandrake.com -- www.disklessworkstations.com - -Newsgroups: -- comp.arch.embedded - -Lists: -- netboot-owner@baghira.han.de -- linux-embedded@waste.org - -Magazines: -- Circuit Cellar #100 - 105 - - -4. Copyright. - -Copyright (c) Pavel Tkatchouk 1999. -Permission is granted for this material to be freely used and distributed, provided the source -is acknowledged. Copyright policy is GPL as published by the Free Software Foundation. - -No warranty of any kind is provided. You use this material at your own risk. - - - -5. Feedback and credits. - -Since I am neither have a lot of Linux experience nor native English speaker, there would be -errors in this document. I would accept any help with gratitude whether in form of proof-reading, -techical corrections or otherwise. Please send your comments, suggestions and questions to Pavel -Tkatchouk (ptkatcho@portal.ca) - -I wish to thank Pierre Mondie who convinced me to start this document. I'm also very much in -debt to all those who's work made this project possible: - -Ken Yap <ken_yap@users.sourceforge.net> (Etherboot) -David Newall <www.tellurian.com.au> (Bootpdnt/Ftpdnt) -(to be continued) - diff --git a/gpxe/contrib/Diskless-From-NT/furtmayr.html b/gpxe/contrib/Diskless-From-NT/furtmayr.html deleted file mode 100644 index 224632d5..00000000 --- a/gpxe/contrib/Diskless-From-NT/furtmayr.html +++ /dev/null @@ -1,82 +0,0 @@ -<html> - -<head> -<title>Free TFTP / Syslog / NFS Servers for Windows</title> -</head> - -<body> - -<h3 align="center">Free TFTP / Syslog / NFS Servers for Windows</h3> -<div align="center"><center> - -<address> - Stefan Furtmayr (<a href="mailto:sf@paf.net">sf@paf.net</a>) -</address> -</center></div> - -<p>Feel free to send me your comments about these programs or some additions.</p> - -<p>Also have a look at the <a -href="http://www.ltsp.org/contrib/diskless-windows-howto.htm">"Diskless Windows -Cookbook "</a> in the <a href="http://www.ltsp.org/contrib/">LTSP Contrib Area</a>.</p> - -<p><small>From this list I have only used the W2K-TFTP once for a customer with the <a -href="http://support.3com.com/infodeli/tools/nic/mba.htm">3Com MBA Utility Disk</a>, while -it can be used as well with <a href="http://etherboot.sourceforge.net">Etherboot</a> -tagged images for other NIC brands.</small><br> -<small>The solution used a netbooted DOS with MS Client 3.0 to easily restore disk images -with <a href="http://www.ghost.com/">Symantec Ghost</a> (see <a -href="http://appdeploy.com/tools/imaging.shtml">appdeploy.com</a> for similar tools).</small><br> -<small>Sure there are several possibilities to do this with Linux but for cloning NT4/W2K -the NTFS support is rather experimental and automatically changing the SID is another -issue.</small></p> - -<h4>TFTP Servers:</h4> - -<p>In Autumn 2000 i tested some different TFTP servers and found out that most of them do -not install/run as a service, especially under W2K. - -<ul> - <li>TFTP server included with Windows 2000 (remote installation services need to be - installed)<br> - The path for the images has to be specified via registry:<br> - Q232115 - Changing the Drive or Volume on Which Remote Installation Images Reside:<br> - <a href="http://support.microsoft.com/support/kb/articles/Q232/1/15.ASP">http://support.microsoft.com/support/kb/articles/Q232/1/15.ASP</a></li> - <li>3CDaemon version 2.0 revision 10. Freeware. Integrated TFTP/FTP/Syslog Daemon for - Windows 95/98/NT<br> - <a href="ftp://ftp.3com.com/pub/utilbin/win32/3cdv2r10.zip">ftp://ftp.3com.com/pub/utilbin/win32/3cdv2r10.zip</a><br> - - Windows 2000 Server: does not run as service!<br> - - Windows NT Server 4.0: not tested</li> - <li>The TFTP Server portion of 3CServer, altered to run as a system Service under Windows NT<br> - <a href="ftp://ftp.3com.com/pub/utilbin/win32/3CTftpSvc.zip">ftp://ftp.3com.com/pub/utilbin/win32/3CTftpSvc.zip</a><br> - - Windows 2000 Server: only working in debug mode, does not run as service!<br> - - Windows NT Server 4.0: not tested</li> - <li>Cisco TFTP Server v.1.1<br> - <a href="http://www.cisco.com/pcgi-bin/tablebuild.pl/tftp">http://www.cisco.com/pcgi-bin/tablebuild.pl/tftp</a><br> - Does not provide an option itself to install as service.</li> - <li><a href="http://solarwinds.net/Tools/Free_Tools/TFTP_Server/">http://solarwinds.net/Tools/Free_Tools/TFTP_Server/</a><br> - Does not provide an option itself to install as service.</li> -</ul> - -<p><em>Untested:</em></p> - -<p>found on <a href="http://www.nonags.com/nonags/servd32.html">http://www.nonags.com/nonags/servd32.html</a><br> -- <a href="http://www.klever.net/kin/pumpkin.html">http://www.klever.net/kin/pumpkin.html</a><br> -- <a href="http://membres.tripod.fr/phjounin//P_tftpd32.htm">http://membres.tripod.fr/phjounin//P_tftpd32.htm</a></p> - -<h4>Syslog Servers:</h4> - -<ul> - <li>3Com Software Library - Utilities for 32 bit Windows<br> - <a href="http://support.3com.com/software/utilities_for_windows_32_bit.htm">http://support.3com.com/software/utilities_for_windows_32_bit.htm</a></li> - <li><a href="http://www.netal.com/download.htm#SL4NT03">http://www.netal.com/download.htm#SL4NT03</a> - (works as service) </li> -</ul> - -<h4>NFS Servers:</h4> - -<ul> - <li>War NFS Daemon: <a href="http://www.jgaa.com">http://www.jgaa.com</a> (untested)</li> -</ul> -</body> -</html> diff --git a/gpxe/contrib/auto-default/mail b/gpxe/contrib/auto-default/mail deleted file mode 100644 index 015c789a..00000000 --- a/gpxe/contrib/auto-default/mail +++ /dev/null @@ -1,40 +0,0 @@ -Date: 11/9/2001 3:56 PM -Received: 11/9/2001 4:05 PM -From: Steve Tilden, stilden@sicom-sys.com - -... - -2) I have added conditional code to main.c from Etherboot 5.0.4 to add -a new default boot option and I have included the modified main.c as an -attachment to this message. - -As I received Etherboot 5.0.4, in the Config file, if you select -ASK_BOOT with a non zero time-out option, then you also get to set -ANS_DEFAULT = ANS_NETWORK or ANS_DEFAULT = ANS_LOCAL to determine what -will happen if the operator does not respond to the prompt. I have now -added conditional code in main.c such that if you set ANS_DEFAULT = -ANS_AUTO, the default answer will be set according to whether or not -there is a hard disk in the system (as detected by the BIOS). If a hard -disk is present, then if the operator does nothing, the system will boot -from it. If a hard disk does not exist, then again if the operator does -nothing, the system will boot via the network. Either way, for our -particular environment, the operator has to do nothing to get it to boot -correctly. Yet the operator can still override the default selection -to, for example, allow a unit without a hard disk, to boot directly from -a floppy rather than the network, or to allow a unit with a hard disk, -to boot from the network. - -I don't know it the code I have added might be correct for a future -production version of Etherboot, but I thought I'd send it to you and -let you get it into the system if you feel it might be appropriate. - -Thanks, - -Steve Tilden -Sicom Systems Inc. -stilden@sicom-sys.com - -[Ed: On a compliant BIOS, it will actually boot the next device in the -BIOS list if local is selected, either explicitly or by timeout, which -may or may not be the hard disk, which is why it's less than general and -not included in the distribution by default.] diff --git a/gpxe/contrib/auto-default/main.c.patch b/gpxe/contrib/auto-default/main.c.patch deleted file mode 100644 index e707b63a..00000000 --- a/gpxe/contrib/auto-default/main.c.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- main.c Mon Nov 5 18:58:30 2001 -+++ main.c.new Thu Nov 15 01:45:12 2001 -@@ -149,21 +151,49 @@ - static unsigned short ipchksum(unsigned short *ip, int len); - static unsigned short udpchksum(struct iphdr *packet); - -+ -+#if defined(ASK_BOOT) && ASK_BOOT > 0 && (ANS_DEFAULT == ANS_AUTO) -+/* -+ * Read Installed Hard Disk Count from BIOS memory at 0:0475 -+ */ -+static int hdsk_cnt(void) -+{ -+ int retv; -+ __asm__ __volatile__( -+ "xorw %%ax,%%ax\n\t" -+ "movb 0x475,%%al\n" -+ : "=a" (retv) -+ : /* no inputs */ -+ : "ax", "cc", "memory" -+ ); -+ return(retv); -+} -+#endif /* ASK_BOOT && ANS_AUTO */ -+ -+ - static inline void ask_boot(void) - { - #if defined(ASK_BOOT) && ASK_BOOT > 0 - while(1) { -- int c; -+ int c, deflt; - unsigned long time; -+#if defined(ASK_BOOT) && ASK_BOOT > 0 && (ANS_DEFAULT == ANS_AUTO) -+ if (hdsk_cnt() != 0) -+ deflt = ANS_LOCAL; -+ else -+ deflt = ANS_NETWORK; -+#else -+ deflt = ANS_DEFAULT; -+#endif - printf(ASK_PROMPT); - for (time = currticks() + ASK_BOOT*TICKS_PER_SEC; !iskey(); ) - if (currticks() > time) { -- c = ANS_DEFAULT; -+ c = deflt; - goto done; - } - c = getchar(); - if ((c >= 'a') && (c <= 'z')) c &= 0x5F; -- if (c == '\n') c = ANS_DEFAULT; -+ if (c == '\n') c = deflt; - done: - if ((c >= ' ') && (c <= '~')) putchar(c); - putchar('\n'); diff --git a/gpxe/contrib/award_plugin_roms/README b/gpxe/contrib/award_plugin_roms/README deleted file mode 100644 index 5f657cf5..00000000 --- a/gpxe/contrib/award_plugin_roms/README +++ /dev/null @@ -1,2 +0,0 @@ -An Award BIOS ROM lister in Perl contributed by Eric W. Biederman -<ebiederman@lnxi.com>. diff --git a/gpxe/contrib/award_plugin_roms/award_plugin_roms.pl b/gpxe/contrib/award_plugin_roms/award_plugin_roms.pl deleted file mode 100755 index 2b95eed1..00000000 --- a/gpxe/contrib/award_plugin_roms/award_plugin_roms.pl +++ /dev/null @@ -1,341 +0,0 @@ -#!/usr/bin/perl -w -use strict; -use FileHandle; -use integer; - -sub unsigned_little_endian_to_value -{ - # Assumes the data is initially little endian - my ($buffer) = @_; - my $bytes = length($buffer); - my $value = 0; - my $i; - for($i = $bytes -1; $i >= 0; $i--) { - my $byte = unpack('C', substr($buffer, $i, 1)); - $value = ($value * 256) + $byte; - } - return $value; -} - -sub decode_fixed_string -{ - my ($data, $bytes) = @_; - return $data; -} - -sub decode_pstring -{ - my ($buf_ref, $offset_ref) = @_; - # Decode a pascal string - my $offset = ${$offset_ref}; - my $len = unpack('C',substr(${$buf_ref}, $offset, 1)); - my $data = substr(${$buf_ref}, $offset +1, $len); - ${$offset_ref} = $offset + $len +1; - return $data; -} - -sub decode_cstring -{ - # Decode a c string - my ($buf_ref, $offset_ref) = @_; - my ($data, $byte); - my $index = ${$offset_ref}; - while(1) { - $byte = substr(${$buf_ref}, $index, 1); - if (!defined($byte) || ($byte eq "\0")) { - last; - } - $data .= $byte; - $index++; - } - ${$offset_ref} = $index; - return $data; -} - -sub type_size -{ - my ($entry) = @_; - my %type_length = ( - byte => 1, - half => 2, - word => 4, - xword => 8, - 'fixed-string' => $entry->[2], - pstring => 0, - cstring => 0, - ); - my $type = $entry->[0]; - if (!exists($type_length{$type})) { - die "unknown type $type"; - } - my $length = $type_length{$type}; - return $length; -} - -sub decode_fixed_type -{ - my ($type, $data, $bytes) = @_; - my %decoders = ( - 'byte' => \&unsigned_little_endian_to_value, - 'half' => \&unsigned_little_endian_to_value, - 'word' => \&unsigned_little_endian_to_value, - 'xword' => \&unsigned_little_endian_to_value, - 'fixed-string' => \&decode_fixed_string, - ); - my $decoder = $decoders{$type} or die "unknow fixed type $type"; - return $decoder->($data, $bytes); -} - -sub decode_variable_type -{ - my ($type, $buf_ref, $offset_ref) = @_; - my %decoders = ( - 'pstring' => \&decode_pstring, - 'cstring' => \&decode_cstring, - ); - my $decoder = $decoders{$type} or die "unknow variable type $type"; - return $decoder->($buf_ref, $offset_ref); -} - -sub decode_struct -{ - my ($buf_ref, $offset, $layout) = @_; - my $initial_offset = $offset; - my ($entry, %results); - foreach $entry (@$layout) { - my ($type, $name) = @$entry; - my $bytes = type_size($entry); - if ($bytes > 0) { - my $data = substr(${$buf_ref}, $offset, $bytes); - $results{$name} = decode_fixed_type($type, $data, $bytes); - $offset += $bytes; - } else { - $results{$name} = decode_variable_type($type, $buf_ref, \$offset); - } - } - return (\%results, $offset - $initial_offset); -} - -sub print_big_hex -{ - my ($min_digits, $value) = @_; - my @digits; - while($min_digits > 0 || ($value > 0)) { - my $digit = $value%16; - $value /= 16; - unshift(@digits, $digit); - $min_digits--; - } - my $digit; - foreach $digit (@digits) { - printf("%01x", $digit); - } -} - - - -my %lha_signatures = ( - '-com-' => 1, - '-lhd-' => 1, - '-lh0-' => 1, - '-lh1-' => 1, - '-lh2-' => 1, - '-lh3-' => 1, - '-lh4-' => 1, - '-lh5-' => 1, - '-lzs-' => 1, - '-lz4-' => 1, - '-lz5-' => 1, - '-afx-' => 1, - '-lzf-' => 1, -); - -my %lha_os = ( - 'M' => 'MS-DOS', - '2' => 'OS/2', - '9' => 'OS9', - 'K' => 'OS/68K', - '3' => 'OS/386', - 'H' => 'HUMAN', - 'U' => 'UNIX', - 'C' => 'CP/M', - 'F' => 'FLEX', - 'm' => 'Mac', - 'R' => 'Runser', - 'T' => 'TownOS', - 'X' => 'XOSK', - 'A' => 'Amiga', - 'a' => 'atari', - ' ' => 'Award ROM', -); - - -my @lha_level_1_header = ( - [ 'byte', 'header_size' ], # 1 - [ 'byte', 'header_sum', ], # 2 - [ 'fixed-string', 'method_id', 5 ], # 7 - [ 'word', 'skip_size', ], # 11 - [ 'word', 'original_size' ], # 15 - [ 'half', 'dos_time' ], # 17 - [ 'half', 'dos_date' ], # 19 - [ 'byte', 'fixed' ], # 20 - [ 'byte', 'level' ], # 21 - [ 'pstring', 'filename' ], # 22 - [ 'half', 'crc' ], - [ 'fixed-string', 'os_id', 1 ], - [ 'half', 'ext_size' ], -); - -# General lha_header -my @lha_header = ( - [ 'byte', 'header_size' ], - [ 'byte', 'header_sum', ], - [ 'fixed-string', 'method_id', 5 ], - [ 'word', 'skip_size', ], - [ 'word', 'original_size' ], - [ 'half', 'dos_time' ], - [ 'half', 'dos_date' ], - [ 'half', 'rom_addr' ], - [ 'half', 'rom_flags' ], - [ 'byte', 'fixed' ], - [ 'byte', 'level' ], - [ 'pstring', 'filename' ], - [ 'half', 'crc' ], - [ 'lha_os', 'os_id', 1 ], - [ 'half', 'ext_size' ], - [ 'byte', 'zero' ], - [ 'byte', 'total_checksum' ], - [ 'half', 'total_size' ], -); - -sub print_struct -{ - my ($layout, $self) = @_; - my $entry; - my $width = 0; - foreach $entry(@$layout) { - my ($type, $name) = @$entry; - if (length($name) > $width) { - $width = length($name); - } - } - foreach $entry (@$layout) { - my ($type, $name) = @$entry; - printf("%*s = ", $width, $name); - my $value = $self->{$name}; - if (!defined($value)) { - print "undefined"; - } - elsif ($type eq "lha_os") { - print "$lha_os{$value}"; - } - elsif ($type =~ m/string/) { - print "$value"; - } - else { - my $len = type_size($entry); - print "0x"; - print_big_hex($len *2, $value); - } - print "\n"; - } -} - -sub checksum -{ - my ($buf_ref, $offset, $length) = @_; - my ($i, $sum); - $sum = 0; - for($i = 0; $i < $length; $i++) { - my $byte = unpack('C', substr($$buf_ref, $offset + $i, 1)); - $sum = ($sum + $byte) %256; - } - return $sum; -} - -sub decode_lha_header -{ - my ($buf_ref, $offset) = @_; - my $level = unpack('C',substr(${$buf_ref}, $offset + 20, 1)); - - my %self; - my ($struct, $bytes); - if ($level == 1) { - ($struct, $bytes) - = decode_struct($buf_ref, $offset, \@lha_level_1_header); - %self = %$struct; - if ($self{fixed} != 0x20) { - die "bad fixed value"; - } - $self{total_size} = $self{header_size} + 2 + $self{skip_size}; - if ($bytes != $self{header_size} +2) { - die "$bytes != $self{header_size} +2"; - } - my $checksum = checksum($buf_ref, $offset +2, $self{header_size}); - if ($checksum != $self{header_sum}) { - printf("WARN: Header bytes checksum to %02lx\n", - $checksum); - } - # If we are an award rom... - if ($self{os_id} eq ' ') { - @self{qw(zero total_checksum)} = - unpack('CC', substr($$buf_ref, - $offset + $self{total_size}, 2)); - if ($self{zero} != 0) { - warn "Award ROM without trailing zero"; - } - else { - $self{total_size}++; - } - my $checksum = - checksum($buf_ref, $offset, $self{total_size}); - if ($self{total_checksum} != $checksum) { - printf("WARN: Image bytes checksum to %02lx\n", - $checksum); - } - else { - $self{total_size}++; - } - $self{rom_addr} = $self{dos_time}; - $self{rom_flags} = $self{dos_date}; - delete @self{qw(dos_time dos_date)}; - } - } - else { - die "Unknown header type"; - } - return \%self; -} - -sub main -{ - my ($filename, $rom_length) = @_; - my $fd = new FileHandle; - if (!defined($rom_length)) { - my ($dev, $ino, $mode, $nlink, $uid, $gid,$rdev,$size, - $atime, $mtime, $ctime, $blksize, $blocks) - = stat($filename); - $rom_length = $size; - } - $fd->open("<$filename") or die "Cannot ope $filename"; - my $data; - $fd->read($data, $rom_length); - $fd->close(); - - my $i; - for($i = 0; $i < $rom_length; $i++) { - my $sig = substr($data, $i, 5); - if (exists($lha_signatures{$sig})) { - my $start = $i -2; - my $header = decode_lha_header(\$data, $start); - - my $length = $header->{total_size}; - print "AT: $start - @{[$start + $length -1]}, $length bytes\n"; - print_struct(\@lha_header, $header); - print "\n"; - - } - } -} - -main(@ARGV); diff --git a/gpxe/contrib/baremetal/Makefile b/gpxe/contrib/baremetal/Makefile deleted file mode 100644 index df4de762..00000000 --- a/gpxe/contrib/baremetal/Makefile +++ /dev/null @@ -1,475 +0,0 @@ -# -# Makefile for Etherboot -# -# Most of the time you should edit Config -# -# Common options: -# VERSION=v - Set the version string -# -# NS8390 options: -# -DINCLUDE_NE - Include NE1000/NE2000 support -# -DNE_SCAN=list - Probe for NE base address using list of -# comma separated hex addresses -# -DINCLUDE_3C503 - Include 3c503 support -# -DT503_SHMEM - Use 3c503 shared memory mode (off by default) -# -DINCLUDE_WD - Include Western Digital/SMC support -# -DWD_DEFAULT_MEM- Default memory location for WD/SMC cards -# -DCOMPEX_RL2000_FIX -# -# If you have a Compex RL2000 PCI 32-bit (11F6:1401), -# and the bootrom hangs in "Probing...[NE*000/PCI]", -# try enabling this fix... it worked for me :). -# In the first packet write somehow it somehow doesn't -# get back the expected data so it is stuck in a loop. -# I didn't bother to investigate what or why because it works -# when I interrupt the loop if it takes more then COMPEX_RL2000_TRIES. -# The code will notify if it does a abort. -# SomniOne - somnione@gmx.net -# -# 3C509 option: -# -DINCLUDE_3C509 - Include 3c509 support -# -# 3C90X options: -# -DINCLUDE_3C90X - Include 3c90x support -# -DCFG_3C90X_PRESERVE_XCVR - Reset the transceiver type to the value it -# had initially just before the loaded code is started. -# -DCFG_3C90X_XCVR - Hardcode the tranceiver type Etherboot uses. -# -DCFG_3C90X_BOOTROM_FIX - If you have a 3c905B with buggy ROM -# interface, setting this option might "fix" it. Use -# with caution and read the docs in 3c90x.txt! -# -# See the documentation file 3c90x.txt for more details. -# -# CS89X0 (optional) options: -# -DINCLUDE_CS89X0- Include CS89x0 support -# -DCS_SCAN=list - Probe for CS89x0 base address using list of -# comma separated hex addresses; increasing the -# address by one (0x300 -> 0x301) will force a -# more aggressive probing algorithm. This might -# be neccessary after a soft-reset of the NIC. -# -# LANCE options: -# -DINCLUDE_NE2100- Include NE2100 support -# -DINCLUDE_NI6510- Include NI6510 support -# -# SK_G16 options: -# -DINCLUDE_SK_G16- Include SK_G16 support -# -# I82586 options: -# -DINCLUDE_3C507 - Include 3c507 support -# -DINCLUDE_NI5210- Include NI5210 support -# -DINCLUDE_EXOS205-Include EXOS205 support -# -# SMC9000 options: -# -DINCLUDE_SMC9000 - Include SMC9000 driver -# -DSMC9000_SCAN=list - List of I/O addresses to probe -# -# TIARA (Fujitsu Etherstar) options: -# -DINCLUDE_TIARA - Include Tiara support -# -# NI5010 options: -# -DINCLUDE_NI5010 - Include NI5010 support -# -# TULIP options: -# -DINCLUDE_TULIP - Include Tulip support -# -DUSE_INTERNAL_BUFFER - receuve and transmit buffers within program -# space, not below 0x10000, in case that region is used -# -# RTL8139 options: -# -DINCLUDE_RTL8139 - Include RTL8139 support -# -DUSE_INTERNAL_BUFFER - 8 kB receive buffer within program space, -# not at 0x10000 - 8kB, in case that region is used -# - -include Config - -GCC= gcc -CPP= gcc -E -VERSION= 4.6.12 -CFLAGS16+= -DVERSION=\"$(VERSION)\" -DRELOC=$(RELOCADDR) -CFLAGS32+= -DVERSION=\"$(VERSION)\" -DRELOC=$(RELOCADDR) $(OLDGAS) -LCONFIG+= -DRELOC=$(RELOCADDR) - -IDENT16= 'Etherboot/16 $(VERSION) (GPL) $(@F)' -IDENT32= 'Etherboot/32 $(VERSION) (GPL) $(@F)' - -# Find out if we're using binutils 2.9.1 which uses a different syntax in some -# places (most prominently in the opcode prefix area). -OLDGAS:= $(shell $(AS) --version | grep -q '2\.9\.1' && echo -DGAS291) - -# Check the requested type of build (32, 16 or both families) -ifeq ($(ETHERBOOT),16) -BUILD_LIBS= $(BLIB16) -BUILD_BINS= $(BINS16) -endif -ifeq ($(ETHERBOOT),32) -BUILD_LIBS= $(BLIB32) -BUILD_BINS= $(BINS32) -endif -ifeq ($(ETHERBOOT),both) -BUILD_LIBS= $(BLIB16) $(BLIB32) -BUILD_BINS= $(BINS16) $(BINS32) -endif - -3C503FLAGS= -DINCLUDE_3C503 # -DT503_SHMEM -# Note that the suffix to MAKEROM_ is the (mixed case) basename of the ROM file -MAKEROM_3c503= -3 -3C507FLAGS= -DINCLUDE_3C507 -3C509FLAGS= -DINCLUDE_3C509 -3C529FLAGS= -DINCLUDE_3C529 -3C595FLAGS= -DINCLUDE_3C595 -3C90XFLAGS= -DINCLUDE_3C90X -CS89X0FLAGS= -DINCLUDE_CS89X0 -EEPROFLAGS= -DINCLUDE_EEPRO -EEPRO100FLAGS= -DINCLUDE_EEPRO100 -EPIC100FLAGS= -DINCLUDE_EPIC100 -EXOS205FLAGS= -DINCLUDE_EXOS205 -LANCEFLAGS= -DINCLUDE_LANCE # Lance/PCI! -NE2100FLAGS= -DINCLUDE_NE2100 -NEFLAGS= -DINCLUDE_NE -DNE_SCAN=0x300,0x280,0x320,0x340,0x380 -NS8390FLAGS= -DINCLUDE_NS8390 # NE2000/PCI! -NI5010FLAGS= -DINCLUDE_NI5010 -NI5210FLAGS= -DINCLUDE_NI5210 -NI6510FLAGS= -DINCLUDE_NI6510 -RTL8139FLAGS= -DINCLUDE_RTL8139 -SK_G16FLAGS= -DINCLUDE_SK_G16 -SMC9000FLAGS= -DINCLUDE_SMC9000 -TIARAFLAGS= -DINCLUDE_TIARA -DEPCAFLAGS= -DINCLUDE_DEPCA # -DDEPCA_MODEL=DEPCA -DDEPCA_RAM_BASE=0xd0000 -TULIPFLAGS= -DINCLUDE_TULIP -OTULIPFLAGS= -DINCLUDE_OTULIP -VIA_RHINEFLAGS= -DINCLUDE_VIA_RHINE -WDFLAGS= -DINCLUDE_WD -DWD_DEFAULT_MEM=0xCC000 -W89C840FLAGS= -DINCLUDE_W89C840 - -# If you have not made any changes to the *.S files, AS86 need not be set. -# (most people) -# If you have made changes to the *.S files and you want to rebuild *loader.bin -# and {floppy,com}load.bin and you have as86 from the ELKS Dev86 package (not -# the one that normally comes with Linux) (not most people) -#AS86= as86 -# If you have made changes to the *.S files and you want to rebuild *loader.bin -# and {floppy,com}load.bin and you have nasm (not most people) -#AS86= nasm - -# if your as has trouble with the data32 directive, uncomment this -# but note that the premade start*.o will be larger than necessary because it -# contains some routines which may not be used -#AS_PSEUDOS= n - -SRCS= floppyload.S comload.S liloprefix.S loader.S start16.S start32.S serial.S startmpcc.S -SRCS+= main.c pci.c osloader.c nfs.c misc.c ansiesc.c bootmenu.c config.c -SRCS+= md5.c floppy.c - -# ROM loaders: LZ version (prefix Z), PCI header version (prefix P) -ifndef AS86 -RLOADER= rloader.bin.pre -PRLOADER= prloader.bin.pre -RZLOADER= rzloader.bin.pre -PRZLOADER= przloader.bin.pre -FLOPPYLOAD= floppyload.bin.pre -COMLOAD= comload.bin.pre -LILOPREFIX= liloprefix.bin.pre -else -RLOADER= bin/rloader.bin -PRLOADER= bin/prloader.bin -RZLOADER= bin/rzloader.bin -PRZLOADER= bin/przloader.bin -FLOPPYLOAD= bin/floppyload.bin -COMLOAD= bin/comload.bin -LILOPREFIX= bin/liloprefix.bin -endif - -ifeq ($(AS86),as86) -LCPPFLAGS+= -DUSE_AS86 -LASFLAGS+= $(AS86FLAGS) -0 -LASBINARY:= -b -endif -ifeq ($(AS86),nasm) -LCPPFLAGS+= -DUSE_NASM -LASFLAGS+= $(NASMFLAGS) -fbin -LASBINARY:= -o -endif - -ifeq ($(AS_PSEUDOS),n) -START16= start16.o.pre -START32= start32.o.pre -else -START16= bin16/start16.o -START32= bin32/startmpcc.o -endif - -BOBJS16= bin16/main.o bin16/osloader.o bin16/misc.o bin16/bootmenu.o -BOBJS16+= bin16/floppy.o bin16/timer.o -BOBJS32= bin32/main.o bin32/osloader.o bin32/nfs.o bin32/misc.o -BOBJS32+= bin32/ansiesc.o bin32/bootmenu.o bin32/md5.o bin32/floppy.o -BOBJS32+= bin32/serial.o bin32/timer.o -BLIB16= bin16/bootlib.a -BLIB32= bin32/bootlib.a -LIBS16= $(BLIB16) $(LIBC16) -LIBS32= $(BLIB32) $(LIBC32) /usr/lib/gcc-lib/i386-redhat-linux/2.96/libgcc.a -UTIL_LZHUF:= $(shell if [ -d ../contrib/compressor ]; then echo bin/lzhuf; fi) -UTILS+= bin/makerom $(UTIL_LZHUF) bin/organon -STDDEPS16= $(START16) $(BLIB16) $(UTILS) -STDDEPS32= $(START32) $(BLIB32) $(UTILS) -MAKEDEPS= Makefile Config Roms - -CHECKSIZE= { read d1; read d1 d2 d3 size d4; [ $$size -gt $(ROMLIMIT) ] &&\ - { $(RM) $@; echo "ERROR: code size exceeds limit!"; exit 1; }; exit 0; } - -# Make sure that the relocation address is acceptable for all ROM sizes. -# Setting it to 0x98000 leaves about 29kB of space for the Etherboot program. -# The check is done based running 'size' on the binary, not ROM size, but -# roughly this means a ROM of 16kB or a partially used ROM of 32kB, -# remembering to compressed ROM images into account. -# You may also set RELOCADDR to 0x88000 to avoid using 0x98000 -# because of other drivers (e.g. Disk On Chip). In that case, you may -# only load 512kB of OS, or load in memory above 1MB. -# Don't forget to choose an assembler because the loaders have to be rebuilt. -ifndef RELOCADDR -RELOCADDR=0x98000 -#RELOCADDR=0xe0000 -endif - -# Evaluate ROMLIMIT only once - it is constant during the make run. -# Note that the 3K safety margin below is for the 1K extended BIOS data area -# and for the Etherboot runtime stack. Under normal situations, 2K of stack -# are rarely needed. If you experience strange behaviour in functions that use -# many local variables or that call functions that do, check for stack overrun! -# Make sure that the normal case needs no perl interpreter - if someone uses a -# different RELOCADDR, then he has perl installed anyways (the shell cannot -# deal with hex numbers, as test/eval don't support non-decimal integers). -ifeq ($(RELOCADDR),0x98000) -ROMLIMIT=29696 -else -ROMLIMIT:=$(shell perl -e 'print 0x10000 - 3072 - ($(RELOCADDR) & 0xFFFF), "\n";') -endif - -# Start of targets - -all: $(UTILS) $(BUILD_LIBS) allbins - -include Roms - -# We need allbins because $(BINS16) and $(BINS32) are not defined until -# the Makefile fragment "Roms" is read. - -allbins: $(BUILD_BINS) - -# Common files - -$(BLIB16): $(BOBJS16) - $(AR16) rv $@ $(BOBJS16) - $(RANLIB16) $@ - -$(BLIB32): $(BOBJS32) - $(AR32) rv $@ $(BOBJS32) - $(RANLIB32) $@ - -bin16/main.o: main.c etherboot.h osdep.h nic.h -bin32/main.o: main.c etherboot.h osdep.h nic.h - -bin16/osloader.o: osloader.c etherboot.h osdep.h -bin32/osloader.o: osloader.c etherboot.h osdep.h - -# NFS currently makes no sense for Etherboot/16 -bin32/nfs.o: nfs.c etherboot.h osdep.h nic.h - -bin16/misc.o: misc.c etherboot.h osdep.h -bin32/misc.o: misc.c etherboot.h osdep.h - -# ANSIESC is not supported for Etherboot/16 -bin32/ansiesc.o: ansiesc.c etherboot.h osdep.h - -bin16/bootmenu.o: bootmenu.c etherboot.h osdep.h -bin32/bootmenu.o: bootmenu.c etherboot.h osdep.h - -# Password support is not available for Etherboot/16 -bin32/md5.o: md5.c etherboot.h osdep.h - -bin16/floppy.o: floppy.c etherboot.h osdep.h -bin32/floppy.o: floppy.c etherboot.h osdep.h - -bin16/timer.o: timer.c timer.h etherboot.h osdep.h -bin32/timer.o: timer.c timer.h etherboot.h osdep.h - -bin32/inthw.o: inthw.c - -# PCI support code (common to all PCI drivers) - -bin32/pci.o: pci.c pci.h - -# Do not add driver specific dependencies here unless it's something the -# genrules.pl script *can't* deal with, i.e. if it is not C code. - -# Prepended loaders - -#ifndef AS86 -#$(RLOADER) $(RZLOADER) $(PRLOADER) $(PRZLOADER): $(MAKEDEPS) -# @if [ $(RELOCADDR) != 0x98000 ]; then echo Non-standard RELOCADDR, must assemble $@; exit 1; fi -# $(TOUCH) $@ -#else -#bin/rloader.s: loader.S $(MAKEDEPS) -# $(CPP) $(LCPPFLAGS) $(LCONFIG) -o $@ $< -# -#bin/rzloader.s: loader.S $(MAKEDEPS) -# $(CPP) $(LCPPFLAGS) $(LCONFIG) -DZLOADER -o $@ $< -# -#bin/prloader.s: loader.S $(MAKEDEPS) -# $(CPP) $(LCPPFLAGS) $(LCONFIG) -DPCI_PNP_HEADER -o $@ $< -# -#bin/przloader.s: loader.S $(MAKEDEPS) -# $(CPP) $(LCPPFLAGS) $(LCONFIG) -DPCI_PNP_HEADER -DZLOADER -o $@ $< -#endif - -# Floppy loader - -ifdef AS86 -bin/floppyload.s: floppyload.S $(MAKEDEPS) - $(CPP) $(LCPPFLAGS) -o $@ $< -endif - -# COM loader - -ifdef AS86 -bin/comload.s: comload.S $(MAKEDEPS) - $(CPP) $(LCPPFLAGS) -o $@ $< -endif - -# LILO prefix: - -ifdef AS86 -bin/liloprefix.s: liloprefix.S $(MAKEDEPS) - $(CPP) $(LCPPFLAGS) -o $@ $< -endif - -# Utilities - -bin/makerom: makerom.c - $(GCC) -O2 -o $@ makerom.c - -bin/organon: organon.c - $(GCC) -o $@ organon.c - -bin/lzhuf: ../contrib/compressor/lzhuf.c - $(GCC) -O2 -DENCODE -DDECODE -DMAIN -DVERBOSE -o $@ $< - -# Roms file - -Roms: NIC genrules.pl - @chmod +x genrules.pl - ./genrules.pl NIC > $@ - -# Pattern Rules - -# general rules for compiling/assembling source files -bin16/%.o: %.c $(MAKEDEPS) - $(CC16) $(CFLAGS16) -o $@ -c $< - -bin32/%.o: %.c $(MAKEDEPS) - $(CC32) $(CFLAGS32) -o $@ -c $< - -bin16/%.o: %.S $(MAKEDEPS) - $(CC16) $(CFLAGS16) $(ASFLAGS16) -c -o $@ $< - -bin32/%.o: %.S $(MAKEDEPS) - $(CPP) $(CFLAGS32) $< | $(AS) $(ASFLAGS32) -o $@ - -# general rule for .bin (plain binary loader code), may be overridden -ifdef AS86 -bin/%.bin: bin/%.s - $(AS86) $(LASFLAGS) $(LASBINARY) $@ $< -endif - -# general rule for .huf (compressed binary code), may be overridden -%.huf: %.img - bin/lzhuf e $< $@ - -# general rules for normal/compressed ROM images, may be overridden -bin16/%.rom: bin16/%.img $(RLOADER) - cat $(RLOADER) $< > $@ - bin/makerom $(MAKEROM_$*) -i$(IDENT16) $@ - -bin32/%.rom: bin32/%.img $(RLOADER) - cat $(RLOADER) $< > $@ - bin/makerom $(MAKEROM_$*) -i$(IDENT32) $@ - -bin16/%.lzrom: bin16/%.huf $(RZLOADER) - cat $(RZLOADER) $< > $@ - bin/makerom $(MAKEROM_$*) -i$(IDENT16) $@ - -bin32/%.lzrom: bin32/%.huf $(RZLOADER) - cat $(RZLOADER) $< > $@ - bin/makerom $(MAKEROM_$*) -i$(IDENT32) $@ - -# rules to write the .rom/.lzrom image onto a blank floppy -# You must give the directory name, e.g. use bin32/rtl8139.lzfd0 as the target. -%.fd0: %.rom $(FLOPPYLOAD) - cat $(FLOPPYLOAD) $< > /dev/fd0 - -%.lzfd0: %.lzrom $(FLOPPYLOAD) - cat $(FLOPPYLOAD) $< > /dev/fd0 - -# rules to generate a .com executable -# You must give the directory name, e.g. use bin32/rtl8139.com as the target. -%.com: %.lzrom $(COMLOAD) - cat $(COMLOAD) $< > $@ - -# rules to make a floppy image (padding to fill an even number of cylinders). -# VMware reports floppy image read errors if it cannot read ahead 36 sectors, -# probably because the floppyload.S code reads up to that number of sectors in -# a single request. Not that 18k matters much these days... -# You must give the directory name, e.g. use bin32/rtl8139.fdimg as the target. -%.fdimg: %.rom $(FLOPPYLOAD) - cat $(FLOPPYLOAD) $< > $@.x - dd if=$@.x of=$@ bs=36k conv=sync 2> /dev/null - $(RM) $@.x - -%.lzfdimg: %.lzrom $(FLOPPYLOAD) - cat $(FLOPPYLOAD) $< > $@.x - dd if=$@.x of=$@ bs=36k conv=sync 2> /dev/null - $(RM) $@.x - -# rules to make a LILO-bootable image -%.lilo: %.rom $(LILOPREFIX) - cat $(LILOPREFIX) $< /dev/zero | head -c 64k > $@ - -%.lzlilo: %.lzrom $(LILOPREFIX) - cat $(LILOPREFIX) $< /dev/zero | head -c 64k > $@ - -# Housekeeping - -# To make sure that this actually builds a start32.o.pre with all options set, -# you have to make sure that -DFLOPPY -DANSIESC -DCONSOLE_DUAL are in CFLAGS32. -precompiled: bin/rloader.bin bin/rzloader.bin bin/prloader.bin bin/przloader.bin bin/floppyload.bin bin/comload.bin bin16/start16.o bin32/start32.o bin/liloprefix.bin - cp -p bin/rloader.bin rloader.bin.pre - cp -p bin/rzloader.bin rzloader.bin.pre - cp -p bin/prloader.bin prloader.bin.pre - cp -p bin/przloader.bin przloader.bin.pre - cp -p bin/floppyload.bin floppyload.bin.pre - cp -p bin/comload.bin comload.bin.pre - cp -p bin16/start16.o start16.o.pre - cp -p bin32/start32.o start32.o.pre - cp -p bin/liloprefix.bin liloprefix.bin.pre - -clean: - $(RM) $(UTILS) bin/*.s bin/*.bin - $(RM) $(BLIB16) $(BLIB32) - $(RM) bin16/*.o bin32/*.o bin16/*.tmp bin32/*.tmp - $(RM) bin16/*.img bin32/*.img bin16/*.huf bin32/*.huf - $(RM) bin16/*.rom bin32/*.rom bin16/*.lzrom bin32/*.lzrom - $(RM) bin16/*.com bin32/*.com - $(RM) bin16/*.fdimg bin32/*.fdimg bin16/*.lzfdimg bin32/*.lzfdimg - $(RM) bin16/*.lilo bin32/*.lilo bin16/*.lzlilo bin32/*.lzlilo - $(RM) bin32/*.hex - $(RM) bin32/*.asm - $(RM) bin32/*.map - -tarball: - (echo -n $(VERSION) ''; date -u +'%Y-%m-%d') > ../VERSION - (cd ..; tar cf /tmp/mpccboot-$(VERSION).tar --exclude CVS mpccboot) - bzip2 -9 < /tmp/mpccboot-$(VERSION).tar > /tmp/mpccboot-$(VERSION).tar.bz2 - gzip -9 < /tmp/mpccboot-$(VERSION).tar > /tmp/mpccboot-$(VERSION).tar.gz - -version: - @echo $(VERSION) diff --git a/gpxe/contrib/baremetal/main.c b/gpxe/contrib/baremetal/main.c deleted file mode 100644 index 7b0de44c..00000000 --- a/gpxe/contrib/baremetal/main.c +++ /dev/null @@ -1,1119 +0,0 @@ -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters - Date: Dec/93 - -Literature dealing with the network protocols: - ARP - RFC826 - RARP - RFC903 - UDP - RFC768 - BOOTP - RFC951, RFC2132 (vendor extensions) - DHCP - RFC2131, RFC2132 (options) - TFTP - RFC1350, RFC2347 (options), RFC2348 (blocksize), RFC2349 (tsize) - RPC - RFC1831, RFC1832 (XDR), RFC1833 (rpcbind/portmapper) - NFS - RFC1094, RFC1813 (v3, useful for clarifications, not implemented) - -**************************************************************************/ - -/* #define MDEBUG */ - -#include "etherboot.h" -#include "nic.h" - -int jmp_bootmenu[10]; - -struct arptable_t arptable[MAX_ARP]; - -const char *kernel; -char kernel_buf[128]; -struct rom_info rom; - -#ifdef IMAGE_MENU -static char *imagelist[RFC1533_VENDOR_NUMOFIMG]; -static int useimagemenu; -int menutmo,menudefault; -unsigned char *defparams = NULL; -int defparams_max = 0; -#endif -#ifdef MOTD -char *motd[RFC1533_VENDOR_NUMOFMOTD]; -#endif -#ifdef IMAGE_FREEBSD -int freebsd_howto = 0; -#endif -int vendorext_isvalid; -char config_buffer[TFTP_MAX_PACKET+1]; /* +1 for null byte */ -unsigned long netmask; -char *hostname = ""; -int hostnamelen = 0; -#if defined(ETHERBOOT16) || defined(INTERNAL_BOOTP_DATA) -struct bootpd_t bootp_data; -#endif -unsigned long xid; -unsigned char *end_of_rfc1533 = NULL; -#ifndef NO_DHCP_SUPPORT -int dhcp_reply; -in_addr dhcp_server = { 0L }; -in_addr dhcp_addr = { 0L }; -#endif /* NO_DHCP_SUPPORT */ - -unsigned char vendorext_magic[] = {0xE4,0x45,0x74,0x68}; /* äEth */ -#ifdef NO_DHCP_SUPPORT -char rfc1533_cookie[5] = { RFC1533_COOKIE, RFC1533_END }; -#else -char rfc1533_cookie[] = { RFC1533_COOKIE}; -char rfc1533_end[]={RFC1533_END }; -static const char dhcpdiscover[]={ - RFC2132_MSG_TYPE,1,DHCPDISCOVER, - RFC2132_MAX_SIZE,2, /* request as much as we can */ - sizeof(struct bootpd_t) / 256, sizeof(struct bootpd_t) % 256, - RFC2132_PARAM_LIST,4,RFC1533_NETMASK,RFC1533_GATEWAY, - RFC1533_HOSTNAME - }; -static const char dhcprequest []={ - RFC2132_MSG_TYPE,1,DHCPREQUEST, - RFC2132_SRV_ID,4,0,0,0,0, - RFC2132_REQ_ADDR,4,0,0,0,0, - RFC2132_MAX_SIZE,2, /* request as much as we can */ - sizeof(struct bootpd_t) / 256, sizeof(struct bootpd_t) % 256, - /* request parameters */ - RFC2132_PARAM_LIST, -#ifdef IMAGE_FREEBSD - /* 4 standard + 6 vendortags + 8 motd + 16 menu items */ - 4 + 6 + 8 + 16, -#else - /* 4 standard + 5 vendortags + 8 motd + 16 menu items */ - 4 + 5 + 8 + 16, -#endif - /* Standard parameters */ - RFC1533_NETMASK, RFC1533_GATEWAY, - RFC1533_HOSTNAME, - RFC1533_ROOTPATH, /* only passed to the booted image */ - /* Etherboot vendortags */ - RFC1533_VENDOR_MAGIC, - RFC1533_VENDOR_ADDPARM, - RFC1533_VENDOR_ETHDEV, -#ifdef IMAGE_FREEBSD - RFC1533_VENDOR_HOWTO, -#endif - RFC1533_VENDOR_MNUOPTS, RFC1533_VENDOR_SELECTION, - /* 8 MOTD entries */ - RFC1533_VENDOR_MOTD, - RFC1533_VENDOR_MOTD+1, - RFC1533_VENDOR_MOTD+2, - RFC1533_VENDOR_MOTD+3, - RFC1533_VENDOR_MOTD+4, - RFC1533_VENDOR_MOTD+5, - RFC1533_VENDOR_MOTD+6, - RFC1533_VENDOR_MOTD+7, - /* 16 image entries */ - RFC1533_VENDOR_IMG, - RFC1533_VENDOR_IMG+1, - RFC1533_VENDOR_IMG+2, - RFC1533_VENDOR_IMG+3, - RFC1533_VENDOR_IMG+4, - RFC1533_VENDOR_IMG+5, - RFC1533_VENDOR_IMG+6, - RFC1533_VENDOR_IMG+7, - RFC1533_VENDOR_IMG+8, - RFC1533_VENDOR_IMG+9, - RFC1533_VENDOR_IMG+10, - RFC1533_VENDOR_IMG+11, - RFC1533_VENDOR_IMG+12, - RFC1533_VENDOR_IMG+13, - RFC1533_VENDOR_IMG+14, - RFC1533_VENDOR_IMG+15, - }; - -#endif /* NO_DHCP_SUPPORT */ -static const char broadcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - -/************************************************************************** -MAIN - Kick off routine -**************************************************************************/ -int main(void) -{ - char *p; - static int card_retries = 0; - int i; - - for (p=_edata; p<_end; p++) - *p = 0; /* Zero BSS */ - -#ifdef CONSOLE_SERIAL - (void)serial_init(); -#endif - -#ifdef DELIMITERLINES - for (i=0; i<80; i++) putchar('='); -#endif - -#ifdef ETHERBOOT32 - rom = *(struct rom_info *)ROM_INFO_LOCATION; - printf("ROM segment %#x length %#x reloc %#x\n", rom.rom_segment, - rom.rom_length << 1, ((unsigned long)_start) >> 4); -#endif -#ifdef ETHERBOOT16 - fmemcpy(&rom, (Address)ROM_INFO_LOCATION, sizeof(rom)); - printf("ROM segment %#x length %#x\n", rom.rom_segment, - rom.rom_length << 1); -#endif -#ifdef ASK_BOOT - while (1) { - int c; - unsigned long time; - printf(ASK_PROMPT); -#if ASK_BOOT > 0 - for (time = currticks() + ASK_BOOT*TICKS_PER_SEC; !iskey(); ) - if (currticks() > time) { - c = ANS_DEFAULT; - goto done; - } -#endif - c = getchar(); - if ((c >= 'a') && (c <= 'z')) c &= 0x5F; - if (c == '\n') c = ANS_DEFAULT; -done: - if ((c >= ' ') && (c <= '~')) putchar(c); - putchar('\n'); - if (c == ANS_LOCAL) - exit(0); - if (c == ANS_NETWORK) - break; - } -#endif -#if (TRY_FLOPPY_FIRST > 0) && defined(FLOPPY) - disk_init(); - printf("Trying floppy"); - for (i = TRY_FLOPPY_FIRST; i-- > 0; ) { - putchar('.'); - if (disk_read(0, 0, 0, 0, ((char *) FLOPPY_BOOT_LOCATION)) != 0x8000) { - printf("using floppy\n"); - exit(0); - } - } - printf("no floppy\n"); -#endif /* TRY_FLOPPY_FIRST && FLOPPY */ - print_config(); - gateA20_set(); -#ifdef EMERGENCYDISKBOOT - if (!eth_probe()) { - printf("No adapter found\n"); - exit(0); - } -#else - while (!eth_probe()) { - printf("No adapter found"); - if (!setjmp(jmp_bootmenu)) - rfc951_sleep(++card_retries); - } -#endif - kernel = DEFAULT_BOOTFILE; - while (1) { - if ((i = setjmp(jmp_bootmenu)) != 0) { -#if defined(ANSIESC) && defined(CONSOLE_CRT) - ansi_reset(); -#endif - bootmenu(--i); - } else { - load(); - } -#if defined(ANSIESC) && defined(CONSOLE_CRT) - ansi_reset(); -#endif - } -} - -/************************************************************************** -LOADKERNEL - Try to load kernel image -**************************************************************************/ -#ifndef FLOPPY -#define loadkernel(s) download((s),downloadkernel) -#else -static int loadkernel(const char *fname) -{ - if (!memcmp(fname,"/dev/",5) && fname[6] == 'd') { - int dev, part = 0; - if (fname[5] == 'f') { - if ((dev = fname[7] - '0') < 0 || dev > 3) - goto nodisk; } - else if (fname[5] == 'h' || fname[5] == 's') { - if ((dev = 0x80 + fname[7] - 'a') < 0x80 || dev > 0x83) - goto nodisk; - if (fname[8]) { - part = fname[8] - '0'; - if (fname[9]) - part = 10*part + fname[9] - '0'; } - /* bootdisk cannot cope with more than eight partitions */ - if (part < 0 || part > 8) - goto nodisk; } - else - goto nodisk; - return(bootdisk(dev,part)); } -nodisk: - return download(fname, downloadkernel); -} -#endif - -/************************************************************************** -LOAD - Try to get booted -**************************************************************************/ -void load() -{ - static int bootp_completed = 0; - - /* Find a server to get BOOTP reply from */ - if (!bootp_completed || - !arptable[ARP_CLIENT].ipaddr.s_addr || !arptable[ARP_SERVER].ipaddr.s_addr) { -retry: - bootp_completed = 0; -#ifdef RARP_NOT_BOOTP - printf("Searching for server (RARP)...\n"); -#else -#ifndef NO_DHCP_SUPPORT - printf("Searching for server (DHCP)...\n"); -#else - printf("Searching for server (BOOTP)...\n"); -#endif -#endif - -#ifdef RARP_NOT_BOOTP - if (!rarp()) { -#else - if (!bootp()) { -#endif - printf("No Server found\n"); -#ifdef EMERGENCYDISKBOOT - exit(0); -#else - goto retry; -#endif - } - bootp_completed++; - } - printf("Me: %I, Server: %I", - arptable[ARP_CLIENT].ipaddr.s_addr, - arptable[ARP_SERVER].ipaddr.s_addr); - if (BOOTP_DATA_ADDR->bootp_reply.bp_giaddr.s_addr) - printf(", Relay: %I", - BOOTP_DATA_ADDR->bootp_reply.bp_giaddr.s_addr); - if (arptable[ARP_GATEWAY].ipaddr.s_addr) - printf(", Gateway %I", arptable[ARP_GATEWAY].ipaddr.s_addr); - putchar('\n'); - -#ifdef MDEBUG - printf("\n=>>"); getchar(); -#endif - -#ifdef MOTD - if (vendorext_isvalid) - show_motd(); -#endif - /* Now use TFTP to load file */ -#ifdef IMAGE_MENU - if (vendorext_isvalid && useimagemenu) { - selectImage(imagelist); - bootp_completed = 0; - } -#endif -#ifdef DOWNLOAD_PROTO_NFS - rpc_init(); -#endif - for (;;) { - printf("Loading %s ",kernel); - while (!loadkernel(kernel)) { - printf("Unable to load file.\n"); - sleep(2); /* lay off server for a while */ - } - } -} - -/************************************************************************** -DEFAULT_NETMASK - Return default netmask for IP address -**************************************************************************/ -static inline unsigned long default_netmask(void) -{ - int net = ntohl(arptable[ARP_CLIENT].ipaddr.s_addr) >> 24; - if (net <= 127) - return(htonl(0xff000000)); - else if (net < 192) - return(htonl(0xffff0000)); - else - return(htonl(0xffffff00)); -} - -/************************************************************************** -UDP_TRANSMIT - Send a UDP datagram -**************************************************************************/ -int udp_transmit(unsigned long destip, unsigned int srcsock, - unsigned int destsock, int len, const void *buf) -{ - struct iphdr *ip; - struct udphdr *udp; - struct arprequest arpreq; - int arpentry, i; - int retry; - - ip = (struct iphdr *)buf; - udp = (struct udphdr *)((long)buf + sizeof(struct iphdr)); - ip->verhdrlen = 0x45; - ip->service = 0; - ip->len = htons(len); - ip->ident = 0; - ip->frags = 0; - ip->ttl = 60; - ip->protocol = IP_UDP; - ip->chksum = 0; - ip->src.s_addr = arptable[ARP_CLIENT].ipaddr.s_addr; - ip->dest.s_addr = destip; - ip->chksum = ipchksum((unsigned short *)buf, sizeof(struct iphdr)); - udp->src = htons(srcsock); - udp->dest = htons(destsock); - udp->len = htons(len - sizeof(struct iphdr)); - udp->chksum = 0; - if (destip == IP_BROADCAST) { - eth_transmit(broadcast, IP, len, buf); - } else { - if (((destip & netmask) != - (arptable[ARP_CLIENT].ipaddr.s_addr & netmask)) && - arptable[ARP_GATEWAY].ipaddr.s_addr) - destip = arptable[ARP_GATEWAY].ipaddr.s_addr; - for(arpentry = 0; arpentry<MAX_ARP; arpentry++) - if (arptable[arpentry].ipaddr.s_addr == destip) break; - if (arpentry == MAX_ARP) { - printf("%I is not in my arp table!\n", destip); - return(0); - } - for (i = 0; i<ETHER_ADDR_SIZE; i++) - if (arptable[arpentry].node[i]) break; - if (i == ETHER_ADDR_SIZE) { /* Need to do arp request */ - arpreq.hwtype = htons(1); - arpreq.protocol = htons(IP); - arpreq.hwlen = ETHER_ADDR_SIZE; - arpreq.protolen = 4; - arpreq.opcode = htons(ARP_REQUEST); - memcpy(arpreq.shwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - memcpy(arpreq.sipaddr, &arptable[ARP_CLIENT].ipaddr, sizeof(in_addr)); - memset(arpreq.thwaddr, 0, ETHER_ADDR_SIZE); - memcpy(arpreq.tipaddr, &destip, sizeof(in_addr)); - for (retry = 1; retry <= MAX_ARP_RETRIES; retry++) { - eth_transmit(broadcast, ARP, sizeof(arpreq), - &arpreq); - if (await_reply(AWAIT_ARP, arpentry, - arpreq.tipaddr, TIMEOUT)) goto xmit; - rfc951_sleep(retry); - /* We have slept for a while - the packet may - * have arrived by now. If not, we have at - * least some room in the Rx buffer for the - * next reply. */ - if (await_reply(AWAIT_ARP, arpentry, - arpreq.tipaddr, 0)) goto xmit; - } - return(0); - } -xmit: - eth_transmit(arptable[arpentry].node, IP, len, buf); - } - return(1); -} - -/************************************************************************** -DOWNLOADKERNEL - Try to load file -**************************************************************************/ -int downloadkernel(data, block, len, eof) - unsigned char *data; - int block, len, eof; -{ -#ifdef SIZEINDICATOR - static int rlen = 0; - - if (!(block % 4) || eof) { - int size; - size = ((block-1) * rlen + len) / 1024; - - putchar('\b'); - putchar('\b'); - putchar('\b'); - putchar('\b'); - - putchar('0' + (size/1000)%10); - putchar('0' + (size/100)%10); - putchar('0' + (size/10)%10); - putchar('0' + (size/1)%10); - } -#endif - if (block == 1) - { -#ifdef SIZEINDICATOR - rlen=len; -#endif - if (!eof && ( -#ifdef TAGGED_IMAGE - *((unsigned long *)data) == 0x1B031336L || -#endif -#ifdef ELF_IMAGE - *((unsigned long *)data) == 0x464C457FL || -#endif -#ifdef AOUT_IMAGE - *((unsigned short *)data) == 0x010BL || -#endif - ((unsigned short *)data)[255] == 0xAA55)) - { - ; - } - else if (eof) - { - memcpy(config_buffer, data, len); - config_buffer[len] = 0; - return (1); /* done */ - } - else - { - printf("error: not a tagged image\n"); - return(0); /* error */ - } - } - if (len != 0) { - if (!os_download(block, data, len)) - return(0); /* error */ - } - if (eof) { - os_download(block+1, data, 0); /* does not return */ - return(0); /* error */ - } - return(-1); /* there is more data */ -} - -#ifdef DOWNLOAD_PROTO_TFTP -/************************************************************************** -TFTP - Download extended BOOTP data, or kernel image -**************************************************************************/ -int tftp(const char *name, int (*fnc)(unsigned char *, int, int, int)) -{ - int retry = 0; - static unsigned short iport = 2000; - unsigned short oport; - unsigned short len, block = 0, prevblock = 0; - int bcounter = 0; - struct tftp_t *tr; - struct tftp_t tp; - int rc; - int packetsize = TFTP_DEFAULTSIZE_PACKET; - - /* Clear out the Rx queue first. It contains nothing of interest, - * except possibly ARP requests from the DHCP/TFTP server. We use - * polling throughout Etherboot, so some time may have passed since we - * last polled the receive queue, which may now be filled with - * broadcast packets. This will cause the reply to the packets we are - * about to send to be lost immediately. Not very clever. */ - await_reply(AWAIT_QDRAIN, 0, NULL, 0); - - tp.opcode = htons(TFTP_RRQ); - len = (sprintf((char *)tp.u.rrq, "%s%coctet%cblksize%c%d", - name, 0, 0, 0, TFTP_MAX_PACKET) - ((char *)&tp)) + 1; - if (!udp_transmit(arptable[ARP_SERVER].ipaddr.s_addr, ++iport, - TFTP_PORT, len, &tp)) - return (0); - for (;;) - { -#ifdef CONGESTED - if (!await_reply(AWAIT_TFTP, iport, NULL, (block ? TFTP_REXMT : TIMEOUT))) -#else - if (!await_reply(AWAIT_TFTP, iport, NULL, TIMEOUT)) -#endif - { - if (!block && retry++ < MAX_TFTP_RETRIES) - { /* maybe initial request was lost */ - rfc951_sleep(retry); - if (!udp_transmit(arptable[ARP_SERVER].ipaddr.s_addr, - ++iport, TFTP_PORT, len, &tp)) - return (0); - continue; - } -#ifdef CONGESTED - if (block && ((retry += TFTP_REXMT) < TFTP_TIMEOUT)) - { /* we resend our last ack */ -#ifdef MDEBUG - printf("<REXMT>\n"); -#endif - udp_transmit(arptable[ARP_SERVER].ipaddr.s_addr, - iport, oport, - TFTP_MIN_PACKET, &tp); - continue; - } -#endif - break; /* timeout */ - } - tr = (struct tftp_t *)&nic.packet[ETHER_HDR_SIZE]; - if (tr->opcode == ntohs(TFTP_ERROR)) - { - printf("TFTP error %d (%s)\n", - ntohs(tr->u.err.errcode), - tr->u.err.errmsg); - break; - } - - if (tr->opcode == ntohs(TFTP_OACK)) { - char *p = tr->u.oack.data, *e; - - if (prevblock) /* shouldn't happen */ - continue; /* ignore it */ - len = ntohs(tr->udp.len) - sizeof(struct udphdr) - 2; - if (len > TFTP_MAX_PACKET) - goto noak; - e = p + len; - while (*p != '\000' && p < e) { - if (!strcasecmp("blksize", p)) { - p += 8; - if ((packetsize = getdec(&p)) < - TFTP_DEFAULTSIZE_PACKET) - goto noak; - while (p < e && *p) p++; - if (p < e) - p++; - } - else { - noak: - tp.opcode = htons(TFTP_ERROR); - tp.u.err.errcode = 8; - len = (sprintf((char *)tp.u.err.errmsg, - "RFC1782 error") - - ((char *)&tp)) + 1; - udp_transmit(arptable[ARP_SERVER].ipaddr.s_addr, - iport, ntohs(tr->udp.src), - len, &tp); - return (0); - } - } - if (p > e) - goto noak; - block = tp.u.ack.block = 0; /* this ensures, that */ - /* the packet does not get */ - /* processed as data! */ - } - else if (tr->opcode == ntohs(TFTP_DATA)) { - len = ntohs(tr->udp.len) - sizeof(struct udphdr) - 4; - if (len > packetsize) /* shouldn't happen */ - continue; /* ignore it */ - block = ntohs(tp.u.ack.block = tr->u.data.block); } - else /* neither TFTP_OACK nor TFTP_DATA */ - break; - - if ((block || bcounter) && (block != prevblock+1)) { - /* Block order should be continuous */ - tp.u.ack.block = htons(block = prevblock); - } - tp.opcode = htons(TFTP_ACK); - oport = ntohs(tr->udp.src); - udp_transmit(arptable[ARP_SERVER].ipaddr.s_addr, iport, - oport, TFTP_MIN_PACKET, &tp); /* ack */ - if ((unsigned short)(block-prevblock) != 1) { - /* Retransmission or OACK, don't process via callback - * and don't change the value of prevblock. */ - continue; - } - prevblock = block; - retry = 0; /* It's the right place to zero the timer? */ - if ((rc = fnc(tr->u.data.download, - ++bcounter, len, len < packetsize)) >= 0) - return(rc); - if (len < packetsize) /* End of data */ - return (1); - } - return (0); -} -#endif /* DOWNLOAD_PROTO_TFTP */ - -#ifdef RARP_NOT_BOOTP -/************************************************************************** -RARP - Get my IP address and load information -**************************************************************************/ -int rarp() -{ - int retry; - - /* arp and rarp requests share the same packet structure. */ - struct arprequest rarpreq; - - memset(&rarpreq, 0, sizeof(rarpreq)); - - rarpreq.hwtype = htons(1); - rarpreq.protocol = htons(IP); - rarpreq.hwlen = ETHER_ADDR_SIZE; - rarpreq.protolen = 4; - rarpreq.opcode = htons(RARP_REQUEST); - memcpy(&rarpreq.shwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - /* sipaddr is already zeroed out */ - memcpy(&rarpreq.thwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - /* tipaddr is already zeroed out */ - - for (retry = 0; retry < MAX_ARP_RETRIES; rfc951_sleep(++retry)) { - eth_transmit(broadcast, RARP, sizeof(rarpreq), &rarpreq); - - if (await_reply(AWAIT_RARP, 0, rarpreq.shwaddr, TIMEOUT)) - break; - } - - if (retry < MAX_ARP_RETRIES) { - sprintf(kernel = kernel_buf, "/tftpboot/kernel.%I", arptable[ARP_CLIENT].ipaddr); - - return (1); - } - return (0); -} - -#else - -/************************************************************************** -BOOTP - Get my IP address and load information -**************************************************************************/ -int bootp() -{ - int retry; -#ifndef NO_DHCP_SUPPORT - int retry1; -#endif /* NO_DHCP_SUPPORT */ - struct bootp_t bp; - unsigned long starttime; -#ifdef T509HACK - int flag; - - flag = 1; -#endif - memset(&bp, 0, sizeof(struct bootp_t)); - bp.bp_op = BOOTP_REQUEST; - bp.bp_htype = 1; - bp.bp_hlen = ETHER_ADDR_SIZE; - bp.bp_xid = xid = starttime = currticks(); - memcpy(bp.bp_hwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); -#ifdef NO_DHCP_SUPPORT - memcpy(bp.bp_vend, rfc1533_cookie, 5); /* request RFC-style options */ -#else - memcpy(bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); /* request RFC-style options */ - memcpy(bp.bp_vend+sizeof rfc1533_cookie, dhcpdiscover, sizeof dhcpdiscover); - memcpy(bp.bp_vend+sizeof rfc1533_cookie +sizeof dhcpdiscover, rfc1533_end, sizeof rfc1533_end); -#endif /* NO_DHCP_SUPPORT */ - - for (retry = 0; retry < MAX_BOOTP_RETRIES; ) { - - /* Clear out the Rx queue first. It contains nothing of - * interest, except possibly ARP requests from the DHCP/TFTP - * server. We use polling throughout Etherboot, so some time - * may have passed since we last polled the receive queue, - * which may now be filled with broadcast packets. This will - * cause the reply to the packets we are about to send to be - * lost immediately. Not very clever. */ - await_reply(AWAIT_QDRAIN, 0, NULL, 0); - - udp_transmit(IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER, - sizeof(struct bootp_t), &bp); -#ifdef T509HACK - if (flag) { - flag--; - } else { - if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)) - return(1); - rfc951_sleep(++retry); - - } -#else -#ifdef NO_DHCP_SUPPORT - if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)) -#else - if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)){ - if (dhcp_reply==DHCPOFFER){ - dhcp_reply=0; - memcpy(bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); - memcpy(bp.bp_vend+sizeof rfc1533_cookie, dhcprequest, sizeof dhcprequest); - memcpy(bp.bp_vend+sizeof rfc1533_cookie +sizeof dhcprequest, rfc1533_end, sizeof rfc1533_end); - memcpy(bp.bp_vend+9, &dhcp_server, sizeof(in_addr)); - memcpy(bp.bp_vend+15, &dhcp_addr, sizeof(in_addr)); - for (retry1 = 0; retry1 < MAX_BOOTP_RETRIES;) { - udp_transmit(IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER, - sizeof(struct bootp_t), &bp); - dhcp_reply=0; - if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)) - if (dhcp_reply==DHCPACK) - return(1); - rfc951_sleep(++retry1); - } - } else -#endif /* NO_DHCP_SUPPORT */ - return(1); -#ifndef NO_DHCP_SUPPORT - } - rfc951_sleep(++retry); - -#endif /* NO_DHCP_SUPPORT */ -#endif - bp.bp_secs = htons((currticks()-starttime)/20); - } - return(0); -} -#endif /* RARP_NOT_BOOTP */ - -/************************************************************************** -AWAIT_REPLY - Wait until we get a response for our request -**************************************************************************/ -int await_reply(int type, int ival, void *ptr, int timeout) -{ - unsigned long time; - struct iphdr *ip; - struct udphdr *udp; - struct arprequest *arpreply; - struct bootp_t *bootpreply; - struct rpc_t *rpc; - unsigned short ptype; - - unsigned int protohdrlen = ETHER_HDR_SIZE + sizeof(struct iphdr) + - sizeof(struct udphdr); - time = timeout + currticks(); - /* The timeout check is done below. The timeout is only checked if - * there is no packet in the Rx queue. This assumes that eth_poll() - * needs a negligible amount of time. */ - for (;;) { - if (eth_poll()) { /* We have something! */ - /* Check for ARP - No IP hdr */ - if (nic.packetlen >= ETHER_HDR_SIZE) { - ptype = ((unsigned short) nic.packet[12]) << 8 - | ((unsigned short) nic.packet[13]); - } else continue; /* what else could we do with it? */ - if ((nic.packetlen >= ETHER_HDR_SIZE + - sizeof(struct arprequest)) && - (ptype == ARP) ) { - unsigned long tmp; - - arpreply = (struct arprequest *) - &nic.packet[ETHER_HDR_SIZE]; - if ((arpreply->opcode == ntohs(ARP_REPLY)) && - !memcmp(arpreply->sipaddr, ptr, sizeof(in_addr)) && - (type == AWAIT_ARP)) { - memcpy(arptable[ival].node, arpreply->shwaddr, ETHER_ADDR_SIZE); - return(1); - } - memcpy(&tmp, arpreply->tipaddr, sizeof(in_addr)); - if ((arpreply->opcode == ntohs(ARP_REQUEST)) && - (tmp == arptable[ARP_CLIENT].ipaddr.s_addr)) { - arpreply->opcode = htons(ARP_REPLY); - memcpy(arpreply->tipaddr, arpreply->sipaddr, sizeof(in_addr)); - memcpy(arpreply->thwaddr, arpreply->shwaddr, ETHER_ADDR_SIZE); - memcpy(arpreply->sipaddr, &arptable[ARP_CLIENT].ipaddr, sizeof(in_addr)); - memcpy(arpreply->shwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - eth_transmit(arpreply->thwaddr, ARP, - sizeof(struct arprequest), - arpreply); -#ifdef MDEBUG - memcpy(&tmp, arpreply->tipaddr, sizeof(in_addr)); - printf("Sent ARP reply to: %I\n",tmp); -#endif MDEBUG - } - continue; - } - - if (type == AWAIT_QDRAIN) { - continue; - } - - /* Check for RARP - No IP hdr */ - if ((type == AWAIT_RARP) && - (nic.packetlen >= ETHER_HDR_SIZE + - sizeof(struct arprequest)) && - (ptype == RARP)) { - arpreply = (struct arprequest *) - &nic.packet[ETHER_HDR_SIZE]; - if ((arpreply->opcode == ntohs(RARP_REPLY)) && - !memcmp(arpreply->thwaddr, ptr, ETHER_ADDR_SIZE)) { - memcpy(arptable[ARP_SERVER].node, arpreply->shwaddr, ETHER_ADDR_SIZE); - memcpy(& arptable[ARP_SERVER].ipaddr, arpreply->sipaddr, sizeof(in_addr)); - memcpy(& arptable[ARP_CLIENT].ipaddr, arpreply->tipaddr, sizeof(in_addr)); - return(1); - } - continue; - } - - /* Anything else has IP header */ - if ((nic.packetlen < protohdrlen) || - (ptype != IP) ) continue; - ip = (struct iphdr *)&nic.packet[ETHER_HDR_SIZE]; - if ((ip->verhdrlen != 0x45) || - ipchksum((unsigned short *)ip, sizeof(struct iphdr)) || - (ip->protocol != IP_UDP)) continue; - udp = (struct udphdr *)&nic.packet[ETHER_HDR_SIZE + - sizeof(struct iphdr)]; - - /* BOOTP ? */ - bootpreply = (struct bootp_t *)&nic.packet[ETHER_HDR_SIZE]; - if ((type == AWAIT_BOOTP) && - (nic.packetlen >= (ETHER_HDR_SIZE + -#ifdef NO_DHCP_SUPPORT - sizeof(struct bootp_t))) && -#else - sizeof(struct bootp_t))-DHCP_OPT_LEN) && -#endif /* NO_DHCP_SUPPORT */ - (ntohs(udp->dest) == BOOTP_CLIENT) && - (bootpreply->bp_op == BOOTP_REPLY) && - (bootpreply->bp_xid == xid)) { - arptable[ARP_CLIENT].ipaddr.s_addr = - bootpreply->bp_yiaddr.s_addr; -#ifndef NO_DHCP_SUPPORT - dhcp_addr.s_addr = bootpreply->bp_yiaddr.s_addr; -#endif /* NO_DHCP_SUPPORT */ - netmask = default_netmask(); - arptable[ARP_SERVER].ipaddr.s_addr = - bootpreply->bp_siaddr.s_addr; - memset(arptable[ARP_SERVER].node, 0, ETHER_ADDR_SIZE); /* Kill arp */ - arptable[ARP_GATEWAY].ipaddr.s_addr = - bootpreply->bp_giaddr.s_addr; - memset(arptable[ARP_GATEWAY].node, 0, ETHER_ADDR_SIZE); /* Kill arp */ - if (bootpreply->bp_file[0]) { - memcpy(kernel_buf, bootpreply->bp_file, 128); - kernel = kernel_buf; - } - memcpy((char *)BOOTP_DATA_ADDR, (char *)bootpreply, sizeof(struct bootpd_t)); - decode_rfc1533(BOOTP_DATA_ADDR->bootp_reply.bp_vend, -#ifdef NO_DHCP_SUPPORT - 0, BOOTP_VENDOR_LEN + MAX_BOOTP_EXTLEN, 1); -#else - 0, DHCP_OPT_LEN + MAX_BOOTP_EXTLEN, 1); -#endif /* NO_DHCP_SUPPORT */ - return(1); - } - -#ifdef DOWNLOAD_PROTO_TFTP - /* TFTP ? */ - if ((type == AWAIT_TFTP) && - (ntohs(udp->dest) == ival)) return(1); -#endif /* DOWNLOAD_PROTO_TFTP */ - -#ifdef DOWNLOAD_PROTO_NFS - /* RPC ? */ - rpc = (struct rpc_t *)&nic.packet[ETHER_HDR_SIZE]; - if ((type == AWAIT_RPC) && - (ntohs(udp->dest) == ival) && - (*(unsigned long *)ptr == ntohl(rpc->u.reply.id)) && - (ntohl(rpc->u.reply.type) == MSG_REPLY)) { - return (1); - } -#endif /* DOWNLOAD_PROTO_NFS */ - - } else { - /* Check for abort key only if the Rx queue is empty - - * as long as we have something to process, don't - * assume that something failed. It is unlikely that - * we have no processing time left between packets. */ - if (iskey() && (getchar() == ESC)) -#ifdef EMERGENCYDISKBOOT - exit(0); -#else - longjmp(jmp_bootmenu,1); -#endif - /* Do the timeout after at least a full queue walk. */ - if ((timeout == 0) || (currticks() > time)) { - break; - } - } - } - return(0); -} - -/************************************************************************** -DECODE_RFC1533 - Decodes RFC1533 header -**************************************************************************/ -int decode_rfc1533(p, block, len, eof) - register unsigned char *p; - int block, len, eof; -{ - static unsigned char *extdata = NULL, *extend = NULL; - unsigned char *extpath = NULL; - unsigned char *endp; - - if (block == 0) { -#ifdef IMAGE_MENU - memset(imagelist, 0, sizeof(imagelist)); - menudefault = useimagemenu = 0; - menutmo = -1; -#endif -#ifdef MOTD - memset(motd, 0, sizeof(motd)); -#endif - end_of_rfc1533 = NULL; - vendorext_isvalid = 0; - if (memcmp(p, rfc1533_cookie, 4)) - return(0); /* no RFC 1533 header found */ - p += 4; - endp = p + len; } - else { - if (block == 1) { - if (memcmp(p, rfc1533_cookie, 4)) - return(0); /* no RFC 1533 header found */ - p += 4; - len -= 4; } - if (extend + len <= (unsigned char *)&(BOOTP_DATA_ADDR->bootp_extension[MAX_BOOTP_EXTLEN])) { - memcpy(extend, p, len); - extend += len; - } else { - printf("Overflow in vendor data buffer! Aborting...\n"); - *extdata = RFC1533_END; - return(0); - } - p = extdata; endp = extend; - } - if (eof) { - while(p < endp) { - unsigned char c = *p; - if (c == RFC1533_PAD) {p++; continue;} - else if (c == RFC1533_END) { - end_of_rfc1533 = endp = p; continue; } - else if (c == RFC1533_NETMASK) {memcpy(&netmask, p+2, sizeof(in_addr));} - - else if (c == RFC1533_GATEWAY) { - /* This is a little simplistic, but it will - usually be sufficient. - Take only the first entry */ - if (TAG_LEN(p) >= sizeof(in_addr)) - memcpy(&arptable[ARP_GATEWAY].ipaddr, p+2, sizeof(in_addr)); - } - else if (c == RFC1533_EXTENSIONPATH) - extpath = p; -#ifndef NO_DHCP_SUPPORT - else if (c == RFC2132_MSG_TYPE) - { dhcp_reply=*(p+2); - } - else if (c == RFC2132_SRV_ID) - { - memcpy(&dhcp_server, p+2, sizeof(in_addr)); - } -#endif /* NO_DHCP_SUPPORT */ - else if (c == RFC1533_HOSTNAME) - { - hostname = p + 2; - hostnamelen = *(p + 1); - } - else if (c == RFC1533_VENDOR_MAGIC -#ifndef IMAGE_FREEBSD /* since FreeBSD uses tag 128 for swap definition */ - && TAG_LEN(p) >= 6 && - !memcmp(p+2,vendorext_magic,4) && - p[6] == RFC1533_VENDOR_MAJOR -#endif - ) - vendorext_isvalid++; -#ifdef IMAGE_FREEBSD - else if (c == RFC1533_VENDOR_HOWTO) { - freebsd_howto = ((p[2]*256+p[3])*256+p[4])*256+p[5]; - } -#endif -#ifdef IMAGE_MENU - else if (c == RFC1533_VENDOR_MNUOPTS) { - parse_menuopts(p+2, TAG_LEN(p)); - } - else if (c >= RFC1533_VENDOR_IMG && - c<RFC1533_VENDOR_IMG+RFC1533_VENDOR_NUMOFIMG){ - imagelist[c - RFC1533_VENDOR_IMG] = p; - useimagemenu++; - } -#endif -#ifdef MOTD - else if (c >= RFC1533_VENDOR_MOTD && - c < RFC1533_VENDOR_MOTD + - RFC1533_VENDOR_NUMOFMOTD) - motd[c - RFC1533_VENDOR_MOTD] = p; -#endif - else { -#if 0 - unsigned char *q; - printf("Unknown RFC1533-tag "); - for(q=p;q<p+2+TAG_LEN(p);q++) - printf("%x ",*q); - putchar('\n'); -#endif - } - p += TAG_LEN(p) + 2; - } - extdata = extend = endp; - if (block == 0 && extpath != NULL) { - char fname[64]; - memcpy(fname, extpath+2, TAG_LEN(extpath)); - fname[(int)TAG_LEN(extpath)] = '\000'; - printf("Loading BOOTP-extension file: %s\n",fname); - download(fname,decode_rfc1533); - } - } - return(-1); /* proceed with next block */ -} - -/************************************************************************** -IPCHKSUM - Checksum IP Header -**************************************************************************/ -unsigned short ipchksum(ip, len) - register unsigned short *ip; - register int len; -{ - unsigned long sum = 0; - len >>= 1; - while (len--) { - sum += *(ip++); - if (sum > 0xFFFF) - sum -= 0xFFFF; - } - return((~sum) & 0x0000FFFF); -} - -/************************************************************************** -RFC951_SLEEP - sleep for expotentially longer times -**************************************************************************/ -void rfc951_sleep(exp) - int exp; -{ - static long seed = 0; - long q; - unsigned long tmo; - -#ifdef BACKOFF_LIMIT - if (exp > BACKOFF_LIMIT) - exp = BACKOFF_LIMIT; -#endif - if (!seed) /* Initialize linear congruential generator */ - seed = currticks() + *(long *)&arptable[ARP_CLIENT].node - + ((short *)arptable[ARP_CLIENT].node)[2]; - /* simplified version of the LCG given in Bruce Scheier's - "Applied Cryptography" */ - q = seed/53668; - if ((seed = 40014*(seed-53668*q) - 12211*q) < 0) seed += 2147483563l; - /* compute mask */ - for (tmo = 63; tmo <= 60*TICKS_PER_SEC && --exp > 0; tmo = 2*tmo+1); - /* sleep */ - printf("<sleep>\n"); - - for (tmo = (tmo&seed)+currticks(); currticks() < tmo; ) - if (iskey() && (getchar() == ESC)) longjmp(jmp_bootmenu,1); - return; -} - -/************************************************************************** -CLEANUP_NET - shut down networking -**************************************************************************/ -void cleanup_net(void) -{ -#ifdef DOWNLOAD_PROTO_NFS - nfs_umountall(ARP_SERVER); -#endif - eth_disable(); - eth_reset(); -} - -/************************************************************************** -CLEANUP - shut down etherboot so that the OS may be called right away -**************************************************************************/ -void cleanup(void) -{ -#if defined(ANSIESC) && defined(CONSOLE_CRT) - ansi_reset(); -#endif -} - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff --git a/gpxe/contrib/baremetal/marini.txt b/gpxe/contrib/baremetal/marini.txt deleted file mode 100644 index 464f1488..00000000 --- a/gpxe/contrib/baremetal/marini.txt +++ /dev/null @@ -1,52 +0,0 @@ -From: "Paolo Marini" <paolom@prisma-eng.it> -Subject: Etherboot on bare metal -Date: Tue, 10 Apr 2001 23:19:19 +0200 -Organization: Prisma Engineering srl - -Hi Ken, -I have ported Etherboot on an embedded, biosless platform and would like -to contribute the code. - -Essentially, the hardware I was running Etherboot is a Pentium based -embedded system, with an Intel Chipset, *but* without serial, VGA, -keyboard etc., only an 82559 Intel (custom) Ethernet controller (I debug -it with the etheral Ethernet packet analyser and an emulator). - -What I did was: - - a.. integrate the init.s file within the firmware, with GDT -(re)initialisation (a simple and single entry point taking control of -the boot process) - b.. provide some stupid BIOS stubs in order to let the OS boot and -still belive that an INT10 call goes to the BIOS - c.. provide some basic functions to Etherboot, like timer (I used the -Pentium TSC internal counter) - d.. hardwire in the code information about the RAM size -The BIOS stubs are enough to boot Linux, pSOS and QNX with bootp. QNX is -somewhat difficult to load, because the i82559 driver tries to find the -component using the BIOS32 calls, so I had to patch it. - -what i I got from the original firmware is the PCI initialisation and -resource (I/O, interrupts, memory) allocation. - -I send you what I changed, that is, the initialisation code and the -misc.c file containing the timer, and the makefile (I don't remember -exactly the options I used to compile all). - -Of course, it is only a good starting point for anyone wanting to -implement a bootp client on a biosless platform; some integration work -still needs to be done. - -Ciao -Paolo - -And in a subsequent email: - -I worked with version 4.6.12, but the real modifications involve the -init.S file, which I think is quite sstable between releases. I forgot -to say that my entry point (symbol _start in init.s) assumes the -processor is already in protected mode. - -[The only difference between main.c and misc.c from those in Etherboot -4.6.12 seems to be the deletion of eth_reset(). This may be of use to -others trying to make these changes work on more recent releases. Ken] diff --git a/gpxe/contrib/baremetal/misc.c b/gpxe/contrib/baremetal/misc.c deleted file mode 100644 index 924ccd6d..00000000 --- a/gpxe/contrib/baremetal/misc.c +++ /dev/null @@ -1,351 +0,0 @@ -/************************************************************************** -MISC Support Routines -**************************************************************************/ - -#include "etherboot.h" - -/************************************************************************** -SLEEP -**************************************************************************/ -void sleep(int secs) -{ - unsigned long tmo; - - for (tmo = currticks()+secs*TICKS_PER_SEC; currticks() < tmo; ) - /* Nothing */; -} - -/************************************************************************** -TWIDDLE -**************************************************************************/ -void twiddle() -{ - static unsigned long lastticks = 0; - static int count=0; - static const char tiddles[]="-\\|/"; - unsigned long ticks; - if ((ticks = currticks()) == lastticks) - return; - lastticks = ticks; - putchar(tiddles[(count++)&3]); - putchar('\b'); -} - -/************************************************************************** -STRCASECMP (not entirely correct, but this will do for our purposes) -**************************************************************************/ -int strcasecmp(a,b) - char *a, *b; -{ - while (*a && *b && (*a & ~0x20) == (*b & ~0x20)) {a++; b++; } - return((*a & ~0x20) - (*b & ~0x20)); -} - -/************************************************************************** -PRINTF and friends - - Formats: - %[#]X - 4 bytes long (8 hex digits) - %[#]x - 2 bytes int (4 hex digits) - - optional # prefixes 0x - %b - 1 byte int (2 hex digits) - %d - decimal int - %c - char - %s - string - %I - Internet address in x.x.x.x notation - Note: width specification not supported -**************************************************************************/ -static char *do_printf(char *buf, const char *fmt, const int *dp) -{ - register char *p; - int alt; - char tmp[16]; - static const char hex[]="0123456789ABCDEF"; - - while (*fmt) { - if (*fmt == '%') { /* switch() uses more space */ - alt = 0; - fmt++; - if (*fmt == '#') { - alt = 1; - fmt++; - } - if (*fmt == 'X') { - const long *lp = (const long *)dp; - register long h = *lp++; - dp = (const int *)lp; - if (alt) { - *buf++ = '0'; - *buf++ = 'x'; - } - *(buf++) = hex[(h>>28)& 0x0F]; - *(buf++) = hex[(h>>24)& 0x0F]; - *(buf++) = hex[(h>>20)& 0x0F]; - *(buf++) = hex[(h>>16)& 0x0F]; - *(buf++) = hex[(h>>12)& 0x0F]; - *(buf++) = hex[(h>>8)& 0x0F]; - *(buf++) = hex[(h>>4)& 0x0F]; - *(buf++) = hex[h& 0x0F]; - } - if (*fmt == 'x') { - register int h = *(dp++); - if (alt) { - *buf++ = '0'; - *buf++ = 'x'; - } - *(buf++) = hex[(h>>12)& 0x0F]; - *(buf++) = hex[(h>>8)& 0x0F]; - *(buf++) = hex[(h>>4)& 0x0F]; - *(buf++) = hex[h& 0x0F]; - } - if (*fmt == 'b') { - register int h = *(dp++); - *(buf++) = hex[(h>>4)& 0x0F]; - *(buf++) = hex[h& 0x0F]; - } - if (*fmt == 'd') { - register int dec = *(dp++); - p = tmp; - if (dec < 0) { - *(buf++) = '-'; - dec = -dec; - } - do { - *(p++) = '0' + (dec%10); - dec = dec/10; - } while(dec); - while ((--p) >= tmp) *(buf++) = *p; - } - if (*fmt == 'I') { - union { - long l; - unsigned char c[4]; - } u; - const long *lp = (const long *)dp; - u.l = *lp++; - dp = (const int *)lp; - buf = sprintf(buf,"%d.%d.%d.%d", - u.c[0], u.c[1], u.c[2], u.c[3]); - } - if (*fmt == 'c') - *(buf++) = *(dp++); - if (*fmt == 's') { - p = (char *)*dp++; - while (*p) *(buf++) = *p++; - } - } else *(buf++) = *fmt; - fmt++; - } - *buf = '\0'; - return(buf); -} - -char *sprintf(char *buf, const char *fmt, ...) -{ - return do_printf(buf, fmt, ((const int *)&fmt)+1); -} - -void printf(const char *fmt, ...) -{ - char buf[120], *p; - - p = buf; - do_printf(buf, fmt, ((const int *)&fmt)+1); - while (*p) putchar(*p++); -} - -#ifdef IMAGE_MENU -/************************************************************************** -INET_ATON - Convert an ascii x.x.x.x to binary form -**************************************************************************/ -int inet_aton(char *p, in_addr *i) -{ - unsigned long ip = 0; - int val; - if (((val = getdec(&p)) < 0) || (val > 255)) return(0); - if (*p != '.') return(0); - p++; - ip = val; - if (((val = getdec(&p)) < 0) || (val > 255)) return(0); - if (*p != '.') return(0); - p++; - ip = (ip << 8) | val; - if (((val = getdec(&p)) < 0) || (val > 255)) return(0); - if (*p != '.') return(0); - p++; - ip = (ip << 8) | val; - if (((val = getdec(&p)) < 0) || (val > 255)) return(0); - i->s_addr = htonl((ip << 8) | val); - return(1); -} - -#endif /* IMAGE_MENU */ - -int getdec(char **ptr) -{ - char *p = *ptr; - int ret=0; - if ((*p < '0') || (*p > '9')) return(-1); - while ((*p >= '0') && (*p <= '9')) { - ret = ret*10 + (*p - '0'); - p++; - } - *ptr = p; - return(ret); -} - -#define K_RDWR 0x60 /* keyboard data & cmds (read/write) */ -#define K_STATUS 0x64 /* keyboard status */ -#define K_CMD 0x64 /* keybd ctlr command (write-only) */ - -#define K_OBUF_FUL 0x01 /* output buffer full */ -#define K_IBUF_FUL 0x02 /* input buffer full */ - -#define KC_CMD_WIN 0xd0 /* read output port */ -#define KC_CMD_WOUT 0xd1 /* write output port */ -#define KB_SET_A20 0xdf /* enable A20, - enable output buffer full interrupt - enable data line - disable clock line */ -#define KB_UNSET_A20 0xdd /* enable A20, - enable output buffer full interrupt - enable data line - disable clock line */ -#ifndef IBM_L40 -static void empty_8042(void) -{ - unsigned long time; - char st; - - time = currticks() + TICKS_PER_SEC; /* max wait of 1 second */ - while ((((st = inb(K_CMD)) & K_OBUF_FUL) || - (st & K_IBUF_FUL)) && - currticks() < time) - inb(K_RDWR); -} -#endif IBM_L40 - -/* - * Gate A20 for high memory - */ -void gateA20_set(void) -{ -#ifdef IBM_L40 - outb(0x2, 0x92); -#else /* IBM_L40 */ - empty_8042(); - outb(KC_CMD_WOUT, K_CMD); - empty_8042(); - outb(KB_SET_A20, K_RDWR); - empty_8042(); -#endif /* IBM_L40 */ -} - -#ifdef TAGGED_IMAGE -/* - * Unset Gate A20 for high memory - some operating systems (mainly old 16 bit - * ones) don't expect it to be set by the boot loader. - */ -void gateA20_unset(void) -{ -#ifdef IBM_L40 - outb(0x0, 0x92); -#else /* IBM_L40 */ - empty_8042(); - outb(KC_CMD_WOUT, K_CMD); - empty_8042(); - outb(KB_UNSET_A20, K_RDWR); - empty_8042(); -#endif /* IBM_L40 */ -} -#endif - -#ifdef ETHERBOOT32 -/* Serial console is only implemented in ETHERBOOT32 for now */ -void -putchar(int c) -{ -#ifndef ANSIESC - if (c == '\n') - putchar('\r'); -#endif - -#ifdef CONSOLE_CRT -#ifdef ANSIESC - handleansi(c); -#else - putc(c); -#endif -#endif -#ifdef CONSOLE_SERIAL -#ifdef ANSIESC - if (c == '\n') - serial_putc('\r'); -#endif - serial_putc(c); -#endif -} - -/************************************************************************** -GETCHAR - Read the next character from the console WITHOUT ECHO -**************************************************************************/ -int -getchar(void) -{ - int c = 256; - -#if defined CONSOLE_CRT || defined CONSOLE_SERIAL - do { -#ifdef CONSOLE_CRT - if (ischar()) - c = getc(); -#endif -#ifdef CONSOLE_SERIAL - if (serial_ischar()) - c = serial_getc(); -#endif - } while (c==256); - if (c == '\r') - c = '\n'; -#endif - return c; -} - -int -iskey(void) -{ -#ifdef CONSOLE_CRT - if (ischar()) - return 1; -#endif -#ifdef CONSOLE_SERIAL - if (serial_ischar()) - return 1; -#endif - return 0; -} -#endif /* ETHERBOOT32 */ - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - -#include <asm/msr.h> - -#define CPUCLOCK 166 - -unsigned long currticks(void) -{ - register unsigned long l, h; - long long unsigned p; - long long unsigned hh,ll; - - rdtsc(l, h); - ll = l, hh = h; - - p = (ll + hh * 0x100000000LL) * 182 / (CPUCLOCK * 100000LL); - return (unsigned)p; -} - diff --git a/gpxe/contrib/baremetal/startmpcc.S b/gpxe/contrib/baremetal/startmpcc.S deleted file mode 100644 index 07486ce5..00000000 --- a/gpxe/contrib/baremetal/startmpcc.S +++ /dev/null @@ -1,756 +0,0 @@ -/* #defines because ljmp wants a number, probably gas bug */ -/* .equ KERN_CODE_SEG,_pmcs-_gdt */ -#define KERN_CODE_SEG 0x08 - .equ KERN_DATA_SEG,_pmds-_gdt -/* .equ REAL_CODE_SEG,_rmcs-_gdt */ -#define REAL_CODE_SEG 0x18 - .equ REAL_DATA_SEG,_rmds-_gdt - .equ CR0_PE,1 - -#ifdef GAS291 -#define DATA32 data32; -#define ADDR32 addr32; -#define LJMPI(x) ljmp x -#else -#define DATA32 data32 -#define ADDR32 addr32 -/* newer GAS295 require #define LJMPI(x) ljmp *x */ -#define LJMPI(x) ljmp x -#endif - -#define PIC1_VBS 0x08 /* PIC1 interrupts start at vector 64 */ -#define PIC2_VBS 0x70 /* PIC1 interrupts start at vector 112 */ - -/* - * NOTE: if you write a subroutine that is called from C code (gcc/egcs), - * then you only have to take care of %ebx, %esi, %edi and %ebp. These - * registers must not be altered under any circumstance. All other registers - * may be clobbered without any negative side effects. If you don't follow - * this rule then you'll run into strange effects that only occur on some - * gcc versions (because the register allocator may use different registers). - * - * All the data32 prefixes for the ljmp instructions are necessary, because - * the assembler emits code with a relocation address of 0. This means that - * all destinations are initially negative, which the assembler doesn't grok, - * because for some reason negative numbers don't fit into 16 bits. The addr32 - * prefixes are there for the same reasons, because otherwise the memory - * references are only 16 bit wide. Theoretically they are all superfluous. - * One last note about prefixes: the data32 prefixes on all call _real_to_prot - * instructions could be removed if the _real_to_prot function is changed to - * deal correctly with 16 bit return addresses. I tried it, but failed. - */ - -/************************************************************************** -START - Where all the fun begins.... -**************************************************************************/ -/* this must be the first thing in the file because we enter from the top */ - .global _start - .code32 -_start: - cli - - /* load new IDT and GDT */ - lgdt gdtarg - lidt Idt_Reg - /* flush prefetch queue, and reload %cs:%eip */ - ljmp $KERN_CODE_SEG,$1f -1: - - /* reload other segment registers */ - movl $KERN_DATA_SEG,%eax - movl %eax,%ds - movl %eax,%es - movl %eax,%ss - movl $stktop,%esp - - /* program the PITs in order to stop them */ - mov $0x30,%al - out %al,$0x43 - out %al,$0x40 - mov $0x70,%al - out %al,$0x43 - out %al,$0x41 - mov $0xf0,%al - out %al,$0x43 - out %al,$0x42 - - call main - /* fall through */ - - .globl exit -exit: -2: - ljmp $KERN_CODE_SEG,$2b - -/************************************************************************** -MEMSIZE - Determine size of extended memory -**************************************************************************/ - .globl memsize -memsize: -#if 0 - pushl %ebx - pushl %esi - pushl %edi - call _prot_to_real - .code16 - movw $0xe801,%ax - stc - int $0x15 - jc 1f - andl $0xffff,%eax - andl $0xffff,%ebx - shll $6,%ebx - addl %ebx,%eax - jmp 2f -1: - movw $0x8800,%ax - int $0x15 - andl $0xffff,%eax -2: - movl %eax,%esi - DATA32 call _real_to_prot - .code32 - movl %esi,%eax - popl %edi - popl %esi - popl %ebx -#else - mov $32768,%eax -#endif - ret - -/************************************************************************** -XSTART - Transfer control to the kernel just loaded -**************************************************************************/ - .code16 - - .globl _int08_handler -_int08_handler: - movb $0x20, %al - outb %al, $0x20 - iret - - .globl _int10_handler -_int10_handler: - cmp $0x3, %ah - jnz _int10_04 - mov $0x0, %dx - mov $0x0, %cx - iret -_int10_04: - cmp $0x4, %ah - jnz _int10_05 - mov $0x0, %ah - iret -_int10_05: - cmp $0x5, %ah - jnz _int10_08 - mov $0x0, %al - iret -_int10_08: - cmp $0x8, %ah - jnz _int10_0D - mov $0x20, %al - mov $0x7, %ah - iret -_int10_0D: - cmp $0xD, %ah - jnz _int10_0F - mov $0x0, %al - iret -_int10_0F: - cmp $0xF, %ah - jnz _int10_XX - mov $0xb, %al - mov $80, %ah - mov $0, %bh -_int10_XX: - iret - - .globl _int11_handler -_int11_handler: - mov $0x22, %ax - iret - - .globl _int12_handler -_int12_handler: - mov $640, %ax - iret - - .globl _int13_handler -_int13_handler: - clc - mov $0, %ah - iret - - .globl _int14_handler -_int14_handler: - iret - - .globl _int15_handler -_int15_handler: - cmp $0xe801,%ax - jz _int15_008 - cmp $0x0, %ah - jz _int15_000 - cmp $0x1, %ah - jz _int15_000 - cmp $0x2, %ah - jz _int15_000 - cmp $0x3, %ah - jz _int15_000 - cmp $0xf, %ah - jz _int15_000 - cmp $0x21, %ah - jz _int15_000 - cmp $0x40, %ah - jz _int15_000 - cmp $0x41, %ah - jz _int15_000 - cmp $0x42, %ah - jz _int15_000 - cmp $0x43, %ah - jz _int15_000 - cmp $0x44, %ah - jz _int15_000 - cmp $0x80, %ah - jz _int15_001 - cmp $0x81, %ah - jz _int15_001 - cmp $0x82, %ah - jz _int15_002 - cmp $0x83, %ah - jz _int15_003 - cmp $0x84, %ah - jz _int15_000 - cmp $0x85, %ah - jz _int15_004 - cmp $0x86, %ah - jz _int15_003 - cmp $0x87, %ah - jz _int15_005 - cmp $0x88, %ah - jz _int15_006 - cmp $0x89, %ah - jz _int15_005 - cmp $0x90, %ah - jz _int15_007 - cmp $0xc0, %ah - jz _int15_000 - cmp $0xc1, %ah - jz _int15_000 - cmp $0xc2, %ah - jz _int15_000 - cmp $0xc3, %ah - jz _int15_000 - cmp $0xc4, %ah - jz _int15_000 - iret - -_int15_000: - mov $0x86, %ah - stc - iret - -_int15_001: - mov $0, %bx - mov $0, %cx - iret - -_int15_002: - mov $0, %bx - iret - -_int15_003: - clc - iret - -_int15_004: - mov $0, %al - iret - -_int15_005: - mov $0, %ah - clc - cmp $0, %ah - iret - -_int15_006: - mov $0xf000, %ax - iret - -_int15_007: - stc - iret - -_int15_008: - clc - mov $1024, %dx /* dx -> extended memory size (in 64K chuncks) */ - mov $640, %cx /* cx -> conventional memory size (in 1 Kbytes chuncks) */ - iret - - .globl _int16_handler -_int16_handler: - cmp $0x0, %ah - jnz _int16_01 - mov $0x20, %al - mov $0x39, %ah - iret -_int16_01: - cmp $0x1, %ah - jnz _int16_02 - iret -_int16_02: - cmp $0x2, %ah - jnz _int16_05 - mov $0, %al - iret -_int16_05: - cmp $0x5, %ah - jnz _int16_10 - mov $0, %al - iret -_int16_10: - cmp $0x10, %ah - jnz _int16_11 - mov $0x20, %al - mov $0x39, %ah - iret -_int16_11: - cmp $0x11, %ah - jnz _int16_12 - iret -_int16_12: - cmp $0x12, %ah - jnz _int16_XX - mov $0, %ax - iret -_int16_XX: - iret - - .globl _int17_handler -_int17_handler: - mov $0xd0, %ah - iret - - .globl _int19_handler -_int19_handler: - hlt - iret - - .globl _int1A_handler -_int1A_handler: - stc - iret - - .code32 - .globl xstart -xstart: - /* reprogram the PICs so that interrupt are masked */ - movb $0x11,%al /* ICW1 [ICW4 NEEDED, EDGE TRIGGERED]*/ - outb %al,$0x20 - movb $PIC1_VBS, %al - outb %al,$0x21 - movb $0x4,%al - outb %al,$0x21 - movb $0x1,%al - outb %al,$0x21 - movb $0xff,%al - outb %al,$0x21 - - movb $0x11,%al /* ICW1 [ICW4 NEEDED, EDGE TRIGGERED]*/ - outb %al,$0xa0 - movb $PIC2_VBS, %al - outb %al,$0xa1 - movb $0x2,%al - outb %al,$0xa1 - movb $0x1,%al - outb %al,$0xa1 - movb $0xff,%al - outb %al,$0xa1 - - pushl %ebp - movl %esp,%ebp - pushl %ebx - pushl %esi - pushl %edi - movl 8(%ebp),%eax - movl %eax,_execaddr - movl 12(%ebp),%ebx - movl 16(%ebp),%ecx /* bootp record (32bit pointer) */ - addl $28,%ecx /* ip, udp header */ - shll $12,%ecx - shrw $12,%cx - call _prot_to_real - .code16 -/* MP: add int10 handler */ - push %eax - push %ebx - push %es - mov $0,%ax - mov %ax,%es - mov %cs,%ax - shl $16,%eax - - ADDR32 mov $(_int08_handler-_start),%ax - mov $0x20,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int10_handler-_start),%ax - mov $0x40,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int11_handler-_start),%ax - mov $0x44,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int12_handler-_start),%ax - mov $0x48,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int13_handler-_start),%ax - mov $0x4c,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int14_handler-_start),%ax - mov $0x50,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int15_handler-_start),%ax - mov $0x54,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int16_handler-_start),%ax - mov $0x58,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int17_handler-_start),%ax - mov $0x5c,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int19_handler-_start),%ax - mov $0x64,%ebx - mov %eax,%es:(%bx) - - ADDR32 mov $(_int1A_handler-_start),%ax - mov $0x68,%ebx - mov %eax,%es:(%bx) - - pop %es - pop %ebx - pop %eax -/* */ - pushl %ecx /* bootp record */ - pushl %ebx /* file header */ - movl $((RELOC<<12)+(1f-RELOC)),%eax - pushl %eax - ADDR32 LJMPI(_execaddr-_start) -1: - addw $8,%sp /* XXX or is this 10 in case of a 16bit "ret" */ - DATA32 call _real_to_prot - .code32 - popl %edi - popl %esi - popl %ebx - popl %ebp - ret - -_execaddr: - .long 0 - -#ifdef IMAGE_MULTIBOOT -/************************************************************************** -XEND - Restart Etherboot from the beginning (from protected mode) -**************************************************************************/ - - .globl xend -xend: - cs - lidt idtarg_realmode-_start+RELOC - cs - lgdt gdtarg-_start+RELOC -#ifdef GAS291 - ljmp $REAL_CODE_SEG,$1f-RELOC /* jump to a 16 bit segment */ -#else - ljmp $REAL_CODE_SEG,$1f-_start /* jump to a 16 bit segment */ -#endif /* GAS291 */ -1: - .code16 - movw $REAL_DATA_SEG,%ax - movw %ax,%ds - movw %ax,%ss - movw %ax,%es - - /* clear the PE bit of CR0 */ - movl %cr0,%eax - andl $0!CR0_PE,%eax - movl %eax,%cr0 - - /* make intersegment jmp to flush the processor pipeline - * and reload %cs:%eip (to clear upper 16 bits of %eip). - */ - DATA32 ljmp $(RELOC)>>4,$2f-_start -2: - /* we are in real mode now - * set up the real mode segment registers : %ds, %ss, %es - */ - movw %cs,%ax - movw %ax,%ds - movw %ax,%es - movw %ax,%ss - xorl %esp,%esp - ADDR32 movw initsp-RELOC,%sp - - movw $0,%ax - movw %ax,%fs - movw %ax,%gs - - sti - jmp _start - - .code32 -#endif /* IMAGE_MULTIBOOT */ - -.global get_cs -get_cs: - xorl %eax,%eax - movw %cs,%ax - ret - -.global get_ds -get_ds: - xorl %eax,%eax - movw %ds,%ax - ret - -.global getsp -getsp: - movl %esp,%eax /* GET STACK POINTER */ - subl $4, %eax /* ACCOUNT FOR RETURN ADDRESS ON */ - ret - -.global get_gdtbase -get_gdtbase: - sub $8,%esp /* ALLOCATE ROOM ON THE STACK */ - sgdt (%esp,1) /*STORE IGDT REGISTER ON STACK */ - mov 2(%esp),%eax /* READ GDT BASE ADDRESS */ - mov $KERN_DATA_SEG,%dx /* ASSUME UNIVERSAL DS. */ - add $8,%esp /* RESTORE STACK */ - ret /* DONE */ - -.global get_gdtsize -get_gdtsize: - sub $8,%esp /* ALLOCATE ROOM ON THE STACK */ - sgdt (%esp,1) /*STORE IGDT REGISTER ON STACK */ - xor %eax,%eax - mov 2(%esp),%eax /* READ GDT BASE ADDRESS */ - mov (%ESP),%ax - shr $3,%ax - add $8,%esp /* RESTORE STACK */ - ret /* DONE */ - -.global get_idtbase -get_idtbase: - sub $8,%esp - sidt (%esp,1) /* STORE IIDT REGISTER ON STACK */ - mov 2(%esp),%eax - mov $KERN_DATA_SEG,%dx - add $8,%esp - ret - -.global get_lw -get_lw: - xor %edx,%edx - mov 8(%esp),%eax - mov 4(%esp),%dx - ret - -/************************************************************************** -SETJMP - Save stack context for non-local goto -**************************************************************************/ - .globl setjmp -setjmp: - mov 4(%esp),%ecx - mov 0(%esp),%edx - mov %edx,0(%ecx) - mov %ebx,4(%ecx) - mov %esp,8(%ecx) - mov %ebp,12(%ecx) - mov %esi,16(%ecx) - mov %edi,20(%ecx) - mov %eax,24(%ecx) - mov $0,%eax - ret - -/************************************************************************** -LONGJMP - Non-local jump to a saved stack context -**************************************************************************/ - .globl longjmp -longjmp: - mov 4(%esp),%edx - mov 8(%esp),%eax - mov 0(%edx),%ecx - mov 4(%edx),%ebx - mov 8(%edx),%esp - mov 12(%edx),%ebp - mov 16(%edx),%esi - mov 20(%edx),%edi - cmp $0,%eax - jne 1f - mov $1,%eax -1: mov %ecx,0(%esp) - ret - -/************************************************************************** -_REAL_TO_PROT - Go from REAL mode to Protected Mode -**************************************************************************/ - .globl _real_to_prot -_real_to_prot: - .code16 - cli - cs - ADDR32 lgdt gdtarg-_start - movl %cr0,%eax - orl $CR0_PE,%eax - movl %eax,%cr0 /* turn on protected mode */ - - /* flush prefetch queue, and reload %cs:%eip */ - DATA32 ljmp $KERN_CODE_SEG,$1f -1: - .code32 - /* reload other segment registers */ - movl $KERN_DATA_SEG,%eax - movl %eax,%ds - movl %eax,%es - movl %eax,%ss - addl $RELOC,%esp /* Fix up stack pointer */ - xorl %eax,%eax - movl %eax,%fs - movl %eax,%gs - popl %eax /* Fix up return address */ - addl $RELOC,%eax - pushl %eax - ret - -/************************************************************************** -_PROT_TO_REAL - Go from Protected Mode to REAL Mode -**************************************************************************/ - .globl _prot_to_real -_prot_to_real: - .code32 - popl %eax - subl $RELOC,%eax /* Adjust return address */ - pushl %eax - subl $RELOC,%esp /* Adjust stack pointer */ -#ifdef GAS291 - ljmp $REAL_CODE_SEG,$1f-RELOC /* jump to a 16 bit segment */ -#else - ljmp $REAL_CODE_SEG,$1f-_start /* jump to a 16 bit segment */ -#endif /* GAS291 */ -1: - .code16 - movw $REAL_DATA_SEG,%ax - movw %ax,%ds - movw %ax,%ss - movw %ax,%es - movw %ax,%fs - movw %ax,%gs - cli - - /* clear the PE bit of CR0 */ - movl %cr0,%eax - andl $0!CR0_PE,%eax - movl %eax,%cr0 - - /* make intersegment jmp to flush the processor pipeline - * and reload %cs:%eip (to clear upper 16 bits of %eip). - */ - DATA32 ljmp $(RELOC)>>4,$2f-_start -2: - /* we are in real mode now - * set up the real mode segment registers : %ds, $ss, %es - */ - movw %cs,%ax - movw %ax,%ds - movw %ax,%es - movw %ax,%ss -#if 0 - sti -#endif - DATA32 ret /* There is a 32 bit return address on the stack */ - .code32 - -/************************************************************************** -GLOBAL DESCRIPTOR TABLE -**************************************************************************/ - .align 4 -Idt_Reg: - .word 0x3ff - .long 0 - - .align 4 -_gdt: -gdtarg: -Gdt_Table: - .word 0x27 /* limit */ - .long _gdt /* addr */ - .word 0 -_pmcs: - /* 32 bit protected mode code segment */ - .word 0xffff,0 - .byte 0,0x9f,0xcf,0 - -_pmds: - /* 32 bit protected mode data segment */ - .word 0xffff,0 - .byte 0,0x93,0xcf,0 - -_rmcs: - /* 16 bit real mode code segment */ - .word 0xffff,(RELOC&0xffff) - .byte (RELOC>>16),0x9b,0x00,(RELOC>>24) - -_rmds: - /* 16 bit real mode data segment */ - .word 0xffff,(RELOC&0xffff) - .byte (RELOC>>16),0x93,0x00,(RELOC>>24) - - .align 4 -RUN_GDT: /* POINTER TO GDT IN RAM */ - .byte 0x7f,0 /* [BSP_GDT_NUM*8]-1 */ - .long Gdt_Table - - .align 4 - - .section ".rodata" -err_not386: - .ascii "Etherboot/32 requires 386+" - .byte 0x0d, 0x0a -err_not386_end: - -days: .long 0 -irq_num: .long - - .data - .align 4 - .org 2048 -.global stktop -stktop: - .long - -.section ".armando" -/* 1:::::::::2:::::::::3:::::::3 */ -/* 12345678901234567890123456789012345678 */ -/* v----+----v----+----v----+----v----+--- */ - -.global EtherbootString -EtherbootString: -.ascii "EtherBoot MPCC " /* fw identifier */ - -.byte 0, 0 /* mandatory hole */ - -.long _start /* entry point */ -.word 0 -.byte 'E' /* type */ -.byte 0 /* selector */ -.word 0 /* CRC */ diff --git a/gpxe/contrib/bin2intelhex/Makefile b/gpxe/contrib/bin2intelhex/Makefile deleted file mode 100644 index 74069688..00000000 --- a/gpxe/contrib/bin2intelhex/Makefile +++ /dev/null @@ -1,9 +0,0 @@ - -CC=gcc -CFLAGS=-Wall -O2 - -bin2intelhex: - - -clean: - rm -f bin2intelhex core *.o diff --git a/gpxe/contrib/bin2intelhex/bin2intelhex.c b/gpxe/contrib/bin2intelhex/bin2intelhex.c deleted file mode 100644 index 75b88c15..00000000 --- a/gpxe/contrib/bin2intelhex/bin2intelhex.c +++ /dev/null @@ -1,148 +0,0 @@ -/* name : bin2intelhex.c - * from : Jean Marc Lacroix <jeanmarc.lacroix@free.fr> - * date : 06/12/1997. - * abstract : Y have rewrite this program from ????? with some modifications - * to add : - * - the Intel specification. - * - correct a bug because my prom programmer don't understand the - * initial format. Y suspect a bug in the calcul of the lrc - * in the original program. - * - correct the format of printf . In the original program, it was - * %x, and it is in fact %X, because in the Intel Format, all the - * char are in upper case. - * - correct the lrc calculation. - * usage: - *------- - * this program read the standard input and put to the standard output - * the result of the conversion. - * an example of use : - * cat my_bin | bin2intelhex > my_bin.hex or..... - * bin2intelhex < my_bin > my_bin.hex - */ - - -/* - * $Id$ - * $Log$ - * Revision 1.1 2005/05/17 16:45:06 mcb30 - * Initial revision - * - * Revision 1.9 1997/12/14 05:14:54 install - * - some documentation.... - * - */ - -#include <stdio.h> -#include <unistd.h> - -/* Intel Hex format specifications - -The 8-bit Intel Hex File Format is a printable ASCII format consisting of one - or more data records followed by an end of file record. Each -record consists of one line of information. Data records may appear in any - order. Address and data values are represented as 2 or 4 hexadecimal -digit values. - -Record Format -:LLAAAARRDDDD......DDDDCC - - -LL -AAAA -RR -DD -CC -Length field. Number of data bytes. -Address field. Address of first byte. -Record type field. 00 for data and 01 for end of record. -Data field. -Checksum field. One's complement of length, address, record type and data - fields modulo 256. -CC = LL + AAAA + RR + all DD = 0 - -Example: -:06010000010203040506E4 -:00000001FF - -The first line in the above example Intel Hex file is a data record addressed - at location 100H with data values 1 to 6. The second line is the end -of file record, so that the LL field is 0 - -*/ - - -typedef unsigned char t_u8; -typedef unsigned short t_u16; -/* - * the choice for the total length (16) of a line, but the specification - * can support an another value - */ -#define LL_MAX_LINE 16 -typedef struct -{ - t_u8 intel_lg_data; - t_u16 intel_adr; - t_u8 intel_type; - t_u8 intel_data [LL_MAX_LINE]; - t_u8 intel_lrc; -} t_one_line; -#define INTEL_DATA_TYPE 0 -#define EXIT_OK 0 -int main (const int argc, const char ** const argv) -{ - t_one_line line; - /* - * init for the adress, please note that it is assume that the program begin at 0 - */ - line.intel_adr = 0; - line.intel_type = INTEL_DATA_TYPE; - /* - * read the data on the standard input - */ - while ((line.intel_lg_data = read (0, &line.intel_data [0] ,LL_MAX_LINE )) > 0) - { - t_u8 i; - /* - * and now for this line, calculate the lrc. - */ - line.intel_lrc = line.intel_lg_data; - line.intel_lrc += ((line.intel_adr >> 8) & 0xff); - line.intel_lrc += (line.intel_adr &0xff); - line.intel_lrc += line.intel_type; - /* - * the structure is ready, print it to stdout in the - * right format - */ - (void) printf (":%02X%04X%02X", - line.intel_lg_data, - line.intel_adr, - line.intel_type); - /* - * edit all the data read - */ - for (i=0; i<line.intel_lg_data; i++) - { - (void) printf ("%02X", - (line.intel_data [i] & 0xff)); - /* - * add to the lrc the data print - */ - line.intel_lrc +=line.intel_data [i]; - } - /* - * edit the value of the lrc and new line for the next - */ - (void) printf ("%02X\n", - (0x100 - line.intel_lrc) & 0xff); - /* - * prepare the new adress for the next line - */ - line.intel_adr+=line.intel_lg_data; - } - /* - * print the last line with a length of 0 data, so that the lrc is easy to - * calculate (ff+01 =0) - */ - printf (":00000001FF\n"); - exit (EXIT_OK); -} diff --git a/gpxe/contrib/bin2intelhex/bin2intelhex.c.simple b/gpxe/contrib/bin2intelhex/bin2intelhex.c.simple deleted file mode 100644 index 3cb279a7..00000000 --- a/gpxe/contrib/bin2intelhex/bin2intelhex.c.simple +++ /dev/null @@ -1,74 +0,0 @@ -/* - - Quick and dirty program to make intel-hex from a binary. - - Written by R.E.Wolff@BitWizard.nl - This file is in the public domain - - Typing started: - - Mon Jun 16 00:24:15 MET DST 1997 - - programming stopped: - - Mon Jun 16 00:31:27 MET DST 1997 - - debugging finished (2 bugs found): - Mon Jun 16 00:32:52 MET DST 1997 - ---------------------------------------------------------- - - Doc written in timeout. Everything else in this file was done while - the timer was running. - - I promised "Mark Kopecki" that writing the bin-to-intel-hex - converter would cost less than 15 minutes, and that it would be more - trouble to find a converter on the net than to write the converter - myself. I ended up spending over half an hour searching for - spec/converter/docs because of unreachable hosts on the internet. I - got a file with docs, after that it was 8 minutes..... - ---------------------------------------------------------- - -*/ - - -#include <stdio.h> -#include <unistd.h> - -/* Intel Hex format: - - ll aaaa tt dd....dd cc - - ll = length - aaaa = address - tt = type - dd....dd = data - cc = checksum. -*/ - - -int main (int argc, char **argv) -{ - unsigned char buf[32]; - int addr = 0; - int n,i; - - while ((n = read (0, buf+4, 16)) > 0) { - buf[0] = n; - buf[1] = addr >> 8; - buf[2] = addr & 0xff; - buf[3] = 0x00; - buf[4+n] = 0x00; - - for (i=0;i<4+n;i++) - buf[4+n] -= buf[i]; - printf (":"); - for (i=0;i<= 4+n;i++) - printf ("%02x", buf[i]); - printf ("\n"); - addr += n; - } - printf (":0000000001ff\n"); - exit (0); -} diff --git a/gpxe/contrib/bochs/.gitignore b/gpxe/contrib/bochs/.gitignore deleted file mode 100644 index 4e8f81ab..00000000 --- a/gpxe/contrib/bochs/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -bochsout.txt -parport.out -ne2k-tx.log -ne2k-txdump.txt -tunctl -bochs -qemu diff --git a/gpxe/contrib/bochs/Makefile b/gpxe/contrib/bochs/Makefile deleted file mode 100644 index 4a5b14ce..00000000 --- a/gpxe/contrib/bochs/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -all : tunctl serial-console.1 - -%.1 : % - pod2man $< > $@ - -tunctl : tunctl.c - $(CC) -o $@ $< - -clean : - rm -f serial-console.1 tunctl diff --git a/gpxe/contrib/bochs/README b/gpxe/contrib/bochs/README deleted file mode 100644 index e0e88032..00000000 --- a/gpxe/contrib/bochs/README +++ /dev/null @@ -1,95 +0,0 @@ -Running Etherboot within Bochs -============================== - -Michael Brown <mbrown@fensystems.co.uk> -Based on an idea suggested by H. Peter Anvin <hpa@zytor.com>. - -$Id$ - -Bochs is a program that simulates a complete Intel x86 computer, -including hardware. It can be used to test Etherboot. There is a -special pseudo NIC ("pnic") implemented in Bochs, with a corresponding -driver in Etherboot. (There is also an NE2000 ISA driver in Bochs, -but it doesn't seem to quite work.) - -To get bochs running is fairly simple: - -1. Build the utilities in this directory: - make - -2. Get the bochs source code: - cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs \ - login - cvs -d:pserver:anonymous@bochs.cvs.sourceforge.net:/cvsroot/bochs \ - co bochs - -3. Configure bochs with - pushd bochs - ./configure --enable-all-optimisations --enable-show-ips \ - --enable-cpu-level=6 \ - --enable-pci --enable-pnic --enable-ne2000 \ - --enable-debugger --enable-disasm - popd - -4. Build bochs: - make -C bochs - -5. As root, set up a TAP virtual network device: - /sbin/modprobe tun - chmod o+rw /dev/net/tun - ./tunctl -u <username> -t tap0 - /sbin/ifconfig tap0 up 10.254.254.2 netmask 255.255.255.0 - -6. As root, add the following fragment to /etc/dhcpd.conf: - subnet 10.254.254.0 netmask 255.255.255.252 { - range dynamic-bootp 10.254.254.1 10.254.254.1; - } - You will also need to add in any of your usual declarations for - Etherboot, e.g. 'filename "vmlinuz.ltsp";'. Note that this setup - assumes that your DHCP server, TFTP server etc. all live on the - machine you are using for running Bochs. If not, then you're on - your own. - -7. As root, restart dhcpd - /etc/init.d/dhcpd restart - -8. Build Etherboot images - pushd ../../src - make bin/pnic.dsk - popd - -9. Start Bochs - ./bochs/bochs -q - You should get to the debugger prompt "<bochs:1>". Type "c" to - start running Bochs. - -You should see Bochs start up, load up Etherboot and attempt to boot -from the network. - - - -Serial console -============== - -You can use the program "serial-console" to obtain a virtual serial -console for Etherboot running within Bochs. Simply run -"./serial-console" on a spare tty (e.g. a separate xterm window) -before starting Bochs, and ensure that you have enabled CONSOLE_SERIAL -in config.h. - -There is a manual page for "serial-console"; use -"man ./serial-console.1" to view it. - - - -TODO -==== - -Packet forwarding/masquerading - document what must be set up. - -Mention possibility of using RFB as the display device - in -conjunction with the serial console, gives you a test facility that -can be accessed remotely. - -Mention use of BOCHSBP instruction (xchgw %bx,%bx) to avoid need to -calculate breakpoints. diff --git a/gpxe/contrib/bochs/README.qemu b/gpxe/contrib/bochs/README.qemu deleted file mode 100644 index 2582f62b..00000000 --- a/gpxe/contrib/bochs/README.qemu +++ /dev/null @@ -1,86 +0,0 @@ -Running Etherboot within qemu -============================= - -Michael Brown <mbrown@fensystems.co.uk> - -To get qemu running is fairly simple: - -1. Build the utilities in this directory: - make - -2. Get the qemu source code: - cvs -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu \ - login - cvs -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu \ - co qemu - -2a. Patch the qemu code. There is currently a bug that causes qemu to - execute Etherboot incredibly slowly. The bug seems to be related - to the relative prioritisation of CPU and I/O operations within - qemu. This patch (which I found via Google) isn't a proper fix, - but it does work around the problem: - patch -p0 < qemu-patch - -3. Configure qemu with - pushd qemu - ./configure --enable-system - popd - - Note that qemu will not compile with gcc4; if your system's - default compiler is gcc4 then specify the path to gcc3 using - e.g. --cc=gcc-3.3.6 - -4. Build qemu: - make -C qemu - -5. As root, set up a TAP virtual network device: - /sbin/modprobe tun - chmod o+rw /dev/net/tun - ./tunctl -u <username> -t tap0 - /sbin/ifconfig tap0 up 10.254.254.2 netmask 255.255.255.0 - -6. As root, add the following fragment to /etc/dhcpd.conf: - subnet 10.254.254.0 netmask 255.255.255.252 { - range dynamic-bootp 10.254.254.1 10.254.254.1; - } - You will also need to add in any of your usual declarations for - Etherboot, e.g. 'filename "vmlinuz.ltsp";'. Note that this setup - assumes that your DHCP server, TFTP server etc. all live on the - machine you are using for running qemu. If not, then you're on - your own. - -7. As root, restart dhcpd - /etc/init.d/dhcpd restart - -8. Build Etherboot floppy disk images and pad to 1.44MB - pushd ../../src - make bin/rtl8139.pdsk - popd - -9. Start qemu - ./qemu/i386-softmmu/qemu -L qemu/pc-bios \ - -net nic,model=rtl8139 -net tap,ifname=tap0 \ - -boot a -fda ../../src/bin/rtl8139.pdsk - -You should see qemu start up, load up Etherboot and attempt to boot -from the network. - - - -Serial console -============== - -You can use the program "serial-console" to obtain a virtual serial -console for Etherboot running within qemu. Run "./serial-console" on -a spare tty (e.g. a separate xterm window) before starting qemu, and -ensure that you have enabled CONSOLE_SERIAL in config.h. - -When serial-console starts, it will print out the message "Slave pty -is /dev/pts/XX", where XX is a number. You need to append the option - - -serial /dev/pts/XX - -to the qemu command line. - -There is a manual page for "serial-console"; use "man -./serial-console.1" to view it. diff --git a/gpxe/contrib/bochs/README.windows-ris b/gpxe/contrib/bochs/README.windows-ris deleted file mode 100644 index 830db6a8..00000000 --- a/gpxe/contrib/bochs/README.windows-ris +++ /dev/null @@ -1,31 +0,0 @@ -Debugging Windows Remote Installation Services (RIS) can be -problematic. Here are some assorted notes on the process: - - -Getting hold of the files -========================= - -Add/Remove Windows Components -> Remote Installation Services - -Files will be placed in \windows\system32\reminst. Copy them out to a -TFTP server. Configure DHCP to hand out startrom.com. - - -Getting past the "Press F12" message -==================================== - -Passing F12 through to the guest machine is difficult. It's easier to -patch the startrom.com binary to accept a different key. Open -startrom.com in a hex editor, search for the hex string -6681fb00860000, and replace it with 6681fb66210000. startrom.com will -now accept the "F" key instead of "F12". - - - -DHCP filename -============= - -Must use Windows backslash separator e.g. 'filename -"OSChooser\\i386\\startrom.com";', otherwise startrom.com fails to -correctly identify the path to NTLDR. - diff --git a/gpxe/contrib/bochs/bochsrc.txt b/gpxe/contrib/bochs/bochsrc.txt deleted file mode 100644 index bf99f4cd..00000000 --- a/gpxe/contrib/bochs/bochsrc.txt +++ /dev/null @@ -1,750 +0,0 @@ -# You may now use double quotes around pathnames, in case -# your pathname includes spaces. - -#======================================================================= -# CONFIG_INTERFACE -# -# The configuration interface is a series of menus or dialog boxes that -# allows you to change all the settings that control Bochs's behavior. -# There are two choices of configuration interface: a text mode version -# called "textconfig" and a graphical version called "wx". The text -# mode version uses stdin/stdout and is always compiled in. The graphical -# version is only available when you use "--with-wx" on the configure -# command. If you do not write a config_interface line, Bochs will -# choose a default for you. -# -# NOTE: if you use the "wx" configuration interface, you must also use -# the "wx" display library. -#======================================================================= -#config_interface: textconfig -#config_interface: wx - -#======================================================================= -# DISPLAY_LIBRARY -# -# The display library is the code that displays the Bochs VGA screen. Bochs -# has a selection of about 10 different display library implementations for -# different platforms. If you run configure with multiple --with-* options, -# the display_library command lets you choose which one you want to run with. -# If you do not write a display_library line, Bochs will choose a default for -# you. -# -# The choices are: -# x use X windows interface, cross platform -# win32 use native win32 libraries -# carbon use Carbon library (for MacOS X) -# beos use native BeOS libraries -# macintosh use MacOS pre-10 -# amigaos use native AmigaOS libraries -# sdl use SDL library, cross platform -# svga use SVGALIB library for Linux, allows graphics without X11 -# term text only, uses curses/ncurses library, cross platform -# rfb provides an interface to AT&T's VNC viewer, cross platform -# wx use wxWidgets library, cross platform -# nogui no display at all -# -# NOTE: if you use the "wx" configuration interface, you must also use -# the "wx" display library. -# -# Specific options: -# Some display libraries now support specific option to control their -# behaviour. See the examples below for currently supported options. -#======================================================================= -#display_library: amigaos -#display_library: beos -#display_library: carbon -#display_library: macintosh -#display_library: nogui -#display_library: rfb, options="timeout=60" # time to wait for client -#display_library: sdl, options="fullscreen" # startup in fullscreen mode -#display_library: term -#display_library: win32, options="legacyF12" # use F12 to toggle mouse -#display_library: wx -#display_library: x - -#======================================================================= -# ROMIMAGE: -# The ROM BIOS controls what the PC does when it first powers on. -# Normally, you can use a precompiled BIOS in the source or binary -# distribution called BIOS-bochs-latest. The ROM BIOS is usually loaded -# starting at address 0xf0000, and it is exactly 64k long. -# You can also use the environment variable $BXSHARE to specify the -# location of the BIOS. -# The usage of external large BIOS images (up to 512k) at memory top is -# now supported, but we still recommend to use the BIOS distributed with -# Bochs. Now the start address can be calculated from image size. -#======================================================================= -romimage: file=bochs/bios/BIOS-bochs-latest, address=0xe0000 -#romimage: file=mybios.bin, address=0xfff80000 # 512k at memory top -#romimage: file=mybios.bin # calculate start address from image size - -#======================================================================= -# CPU: -# This defines cpu-related parameters inside Bochs: -# -# COUNT: -# Set the number of processors:cores per processor:threads per core -# when Bochs is compiled for SMP emulation. -# Bochs currently supports up to 8 threads running simultaniosly. -# If Bochs is compiled without SMP support, it won't accept values -# different from 1. -# -# RESET_ON_TRIPLE_FAULT: -# Reset the CPU when triple fault occur (highly recommended) rather than -# PANIC. Remember that if you trying to continue after triple fault the -# simulation will be completely bogus ! -# -# IPS: -# Emulated Instructions Per Second. This is the number of IPS that bochs -# is capable of running on your machine. You can recompile Bochs with -# --enable-show-ips option enabled, to find your workstation's capability. -# Measured IPS value will then be logged into your log file or status bar -# (if supported by the gui). -# -# IPS is used to calibrate many time-dependent events within the bochs -# simulation. For example, changing IPS affects the frequency of VGA -# updates, the duration of time before a key starts to autorepeat, and -# the measurement of BogoMips and other benchmarks. -# -# Examples: -# Machine Mips -# ________________________________________________________________ -# 2.1Ghz Athlon XP with Linux 2.6/g++ 3.4 12 to 15 Mips -# 1.6Ghz Intel P4 with Win2000/g++ 3.3 5 to 7 Mips -# 650Mhz Athlon K-7 with Linux 2.4.4/egcs-2.91.66 2 to 2.5 Mips -# 400Mhz Pentium II with Linux 2.0.36/egcs-1.0.3 1 to 1.8 Mips -#======================================================================= -cpu: count=1, ips=10000000, reset_on_triple_fault=1 - -#======================================================================= -# MEGS -# Set the number of Megabytes of physical memory you want to emulate. -# The default is 32MB, most OS's won't need more than that. -# The maximum amount of memory supported is 2048Mb. -#======================================================================= -#megs: 256 -#megs: 128 -#megs: 64 -megs: 32 -#megs: 16 -#megs: 8 - -#======================================================================= -# OPTROMIMAGE[1-4]: -# You may now load up to 4 optional ROM images. Be sure to use a -# read-only area, typically between C8000 and EFFFF. These optional -# ROM images should not overwrite the rombios (located at -# F0000-FFFFF) and the videobios (located at C0000-C7FFF). -# Those ROM images will be initialized by the bios if they contain -# the right signature (0x55AA) and a valid checksum. -# It can also be a convenient way to upload some arbitrary code/data -# in the simulation, that can be retrieved by the boot loader -#======================================================================= -#optromimage1: file=optionalrom.bin, address=0xd0000 -#optromimage2: file=optionalrom.bin, address=0xd1000 -#optromimage3: file=optionalrom.bin, address=0xd2000 -#optromimage4: file=optionalrom.bin, address=0xd3000 -optromimage1: file=../../src/bin/pnic.rom, address=0xd0000 -#optromimage1: file=../../src/bin/rtl8029.rom, address=0xd0000 - -#optramimage1: file=/path/file1.img, address=0x0010000 -#optramimage2: file=/path/file2.img, address=0x0020000 -#optramimage3: file=/path/file3.img, address=0x0030000 -#optramimage4: file=/path/file4.img, address=0x0040000 - -#======================================================================= -# VGAROMIMAGE -# You now need to load a VGA ROM BIOS into C0000. -#======================================================================= -#vgaromimage: file=bios/VGABIOS-elpin-2.40 -vgaromimage: file=bochs/bios/VGABIOS-lgpl-latest -#vgaromimage: file=bios/VGABIOS-lgpl-latest-cirrus - -#======================================================================= -# VGA: -# Here you can specify the display extension to be used. With the value -# 'none' you can use standard VGA with no extension. Other supported -# values are 'vbe' for Bochs VBE and 'cirrus' for Cirrus SVGA support. -#======================================================================= -#vga: extension=cirrus -#vga: extension=vbe -vga: extension=none - -#======================================================================= -# FLOPPYA: -# Point this to pathname of floppy image file or device -# This should be of a bootable floppy(image/device) if you're -# booting from 'a' (or 'floppy'). -# -# You can set the initial status of the media to 'ejected' or 'inserted'. -# floppya: 2_88=path, status=ejected (2.88M 3.5" floppy) -# floppya: 1_44=path, status=inserted (1.44M 3.5" floppy) -# floppya: 1_2=path, status=ejected (1.2M 5.25" floppy) -# floppya: 720k=path, status=inserted (720K 3.5" floppy) -# floppya: 360k=path, status=inserted (360K 5.25" floppy) -# floppya: 320k=path, status=inserted (320K 5.25" floppy) -# floppya: 180k=path, status=inserted (180K 5.25" floppy) -# floppya: 160k=path, status=inserted (160K 5.25" floppy) -# floppya: image=path, status=inserted (guess type from image size) -# -# The path should be the name of a disk image file. On Unix, you can use a raw -# device name such as /dev/fd0 on Linux. On win32 platforms, use drive letters -# such as a: or b: as the path. The parameter 'image' works with image files -# only. In that case the size must match one of the supported types. -#======================================================================= -#floppya: 1_44=/dev/fd0, status=inserted -#floppya: image=../1.44, status=inserted -#floppya: 1_44=/dev/fd0H1440, status=inserted -#floppya: 1_2=../1_2, status=inserted -#floppya: 1_44=a:, status=inserted -#floppya: 1_44=a.img, status=inserted -#floppya: 1_44=/dev/rfd0a, status=inserted -floppya: 1_44=../../src/bin/pnic.dsk, status=inserted - -#======================================================================= -# FLOPPYB: -# See FLOPPYA above for syntax -#======================================================================= -#floppyb: 1_44=b:, status=inserted -floppyb: 1_44=b.img, status=inserted - -#======================================================================= -# ATA0, ATA1, ATA2, ATA3 -# ATA controller for hard disks and cdroms -# -# ata[0-3]: enabled=[0|1], ioaddr1=addr, ioaddr2=addr, irq=number -# -# These options enables up to 4 ata channels. For each channel -# the two base io addresses and the irq must be specified. -# -# ata0 and ata1 are enabled by default with the values shown below -# -# Examples: -# ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 -# ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 -# ata2: enabled=1, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 -# ata3: enabled=1, ioaddr1=0x168, ioaddr2=0x360, irq=9 -#======================================================================= -ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 -ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15 -ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11 -ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9 - -#======================================================================= -# ATA[0-3]-MASTER, ATA[0-3]-SLAVE -# -# This defines the type and characteristics of all attached ata devices: -# type= type of attached device [disk|cdrom] -# mode= only valid for disks [flat|concat|external|dll|sparse|vmware3] -# mode= only valid for disks [undoable|growing|volatile] -# path= path of the image -# cylinders= only valid for disks -# heads= only valid for disks -# spt= only valid for disks -# status= only valid for cdroms [inserted|ejected] -# biosdetect= type of biosdetection [none|auto], only for disks on ata0 [cmos] -# translation=type of translation of the bios, only for disks [none|lba|large|rechs|auto] -# model= string returned by identify device command -# journal= optional filename of the redolog for undoable and volatile disks -# -# Point this at a hard disk image file, cdrom iso file, or physical cdrom -# device. To create a hard disk image, try running bximage. It will help you -# choose the size and then suggest a line that works with it. -# -# In UNIX it may be possible to use a raw device as a Bochs hard disk, -# but WE DON'T RECOMMEND IT. In Windows there is no easy way. -# -# In windows, the drive letter + colon notation should be used for cdroms. -# Depending on versions of windows and drivers, you may only be able to -# access the "first" cdrom in the system. On MacOSX, use path="drive" -# to access the physical drive. -# -# The path is always mandatory. For flat hard disk images created with -# bximage geometry autodetection can be used (cylinders=0 -> cylinders are -# calculated using heads=16 and spt=63). For other hard disk images and modes -# the cylinders, heads, and spt are mandatory. -# -# Default values are: -# mode=flat, biosdetect=auto, translation=auto, model="Generic 1234" -# -# The biosdetect option has currently no effect on the bios -# -# Examples: -# ata0-master: type=disk, mode=flat, path=10M.sample, cylinders=306, heads=4, spt=17 -# ata0-slave: type=disk, mode=flat, path=20M.sample, cylinders=615, heads=4, spt=17 -# ata1-master: type=disk, mode=flat, path=30M.sample, cylinders=615, heads=6, spt=17 -# ata1-slave: type=disk, mode=flat, path=46M.sample, cylinders=940, heads=6, spt=17 -# ata2-master: type=disk, mode=flat, path=62M.sample, cylinders=940, heads=8, spt=17 -# ata2-slave: type=disk, mode=flat, path=112M.sample, cylinders=900, heads=15, spt=17 -# ata3-master: type=disk, mode=flat, path=483M.sample, cylinders=1024, heads=15, spt=63 -# ata3-slave: type=cdrom, path=iso.sample, status=inserted -#======================================================================= -#ata0-master: type=disk, mode=flat, path="30M.sample", cylinders=615, heads=6, spt=17 -#ata0-slave: type=cdrom, path=D:, status=inserted -#ata0-slave: type=cdrom, path=/dev/cdrom, status=inserted -#ata0-slave: type=cdrom, path="drive", status=inserted -#ata0-slave: type=cdrom, path=/dev/rcd0d, status=inserted - -#======================================================================= -# BOOT: -# This defines the boot sequence. Now you can specify up to 3 boot drives. -# You can either boot from 'floppy', 'disk' or 'cdrom' -# legacy 'a' and 'c' are also supported -# Examples: -# boot: floppy -# boot: disk -# boot: cdrom -# boot: c -# boot: a -# boot: cdrom, floppy, disk -#======================================================================= -#boot: floppy -#boot: disk - -#======================================================================= -# CLOCK: -# This defines the parameters of the clock inside Bochs: -# -# SYNC: -# TO BE COMPLETED (see Greg explanation in feature request #536329) -# -# TIME0: -# Specifies the start (boot) time of the virtual machine. Use a time -# value as returned by the time(2) system call. If no time0 value is -# set or if time0 equal to 1 (special case) or if time0 equal 'local', -# the simulation will be started at the current local host time. -# If time0 equal to 2 (special case) or if time0 equal 'utc', -# the simulation will be started at the current utc time. -# -# Syntax: -# clock: sync=[none|slowdown|realtime|both], time0=[timeValue|local|utc] -# -# Example: -# clock: sync=none, time0=local # Now (localtime) -# clock: sync=slowdown, time0=315529200 # Tue Jan 1 00:00:00 1980 -# clock: sync=none, time0=631148400 # Mon Jan 1 00:00:00 1990 -# clock: sync=realtime, time0=938581955 # Wed Sep 29 07:12:35 1999 -# clock: sync=realtime, time0=946681200 # Sat Jan 1 00:00:00 2000 -# clock: sync=none, time0=1 # Now (localtime) -# clock: sync=none, time0=utc # Now (utc/gmt) -# -# Default value are sync=none, time0=local -#======================================================================= -#clock: sync=none, time0=local - - -#======================================================================= -# FLOPPY_BOOTSIG_CHECK: disabled=[0|1] -# Enables or disables the 0xaa55 signature check on boot floppies -# Defaults to disabled=0 -# Examples: -# floppy_bootsig_check: disabled=0 -# floppy_bootsig_check: disabled=1 -#======================================================================= -#floppy_bootsig_check: disabled=1 -floppy_bootsig_check: disabled=0 - -#======================================================================= -# LOG: -# Give the path of the log file you'd like Bochs debug and misc. verbiage -# to be written to. If you don't use this option or set the filename to -# '-' the output is written to the console. If you really don't want it, -# make it "/dev/null" (Unix) or "nul" (win32). :^( -# -# Examples: -# log: ./bochs.out -# log: /dev/tty -#======================================================================= -#log: /dev/null -log: bochsout.txt - -#======================================================================= -# LOGPREFIX: -# This handles the format of the string prepended to each log line. -# You may use those special tokens : -# %t : 11 decimal digits timer tick -# %i : 8 hexadecimal digits of cpu current eip (ignored in SMP configuration) -# %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror) -# %d : 5 characters string of the device, between brackets -# -# Default : %t%e%d -# Examples: -# logprefix: %t-%e-@%i-%d -# logprefix: %i%e%d -#======================================================================= -#logprefix: %t%e%d - -#======================================================================= -# LOG CONTROLS -# -# Bochs now has four severity levels for event logging. -# panic: cannot proceed. If you choose to continue after a panic, -# don't be surprised if you get strange behavior or crashes. -# error: something went wrong, but it is probably safe to continue the -# simulation. -# info: interesting or useful messages. -# debug: messages useful only when debugging the code. This may -# spit out thousands per second. -# -# For events of each level, you can choose to crash, report, or ignore. -# TODO: allow choice based on the facility: e.g. crash on panics from -# everything except the cdrom, and only report those. -# -# If you are experiencing many panics, it can be helpful to change -# the panic action to report instead of fatal. However, be aware -# that anything executed after a panic is uncharted territory and can -# cause bochs to become unstable. The panic is a "graceful exit," so -# if you disable it you may get a spectacular disaster instead. -#======================================================================= -panic: action=ask -error: action=report -info: action=report -debug: action=ignore -#pass: action=fatal - -#======================================================================= -# DEBUGGER_LOG: -# Give the path of the log file you'd like Bochs to log debugger output. -# If you really don't want it, make it /dev/null or '-'. :^( -# -# Examples: -# debugger_log: ./debugger.out -#======================================================================= -#debugger_log: /dev/null -#debugger_log: debugger.out -debugger_log: - - -#======================================================================= -# COM1, COM2, COM3, COM4: -# This defines a serial port (UART type 16550A). In the 'term' you can specify -# a device to use as com1. This can be a real serial line, or a pty. To use -# a pty (under X/Unix), create two windows (xterms, usually). One of them will -# run bochs, and the other will act as com1. Find out the tty the com1 -# window using the `tty' command, and use that as the `dev' parameter. -# Then do `sleep 1000000' in the com1 window to keep the shell from -# messing with things, and run bochs in the other window. Serial I/O to -# com1 (port 0x3f8) will all go to the other window. -# Other serial modes are 'null' (no input/output), 'file' (output to a file -# specified as the 'dev' parameter), 'raw' (use the real serial port - under -# construction for win32), 'mouse' (standard serial mouse - requires -# mouse option setting 'type=serial' or 'type=serial_wheel') and 'socket' -# (connect a networking socket). -# -# Examples: -# com1: enabled=1, mode=null -# com1: enabled=1, mode=mouse -# com2: enabled=1, mode=file, dev=serial.out -# com3: enabled=1, mode=raw, dev=com1 -# com3: enabled=1, mode=socket, dev=localhost:8888 -#======================================================================= -#com1: enabled=1, mode=term, dev=/dev/ttyp9 - - -#======================================================================= -# PARPORT1, PARPORT2: -# This defines a parallel (printer) port. When turned on and an output file is -# defined the emulated printer port sends characters printed by the guest OS -# into the output file. On some platforms a device filename can be used to -# send the data to the real parallel port (e.g. "/dev/lp0" on Linux, "lpt1" on -# win32 platforms). -# -# Examples: -# parport1: enabled=1, file="parport.out" -# parport2: enabled=1, file="/dev/lp0" -# parport1: enabled=0 -#======================================================================= -parport1: enabled=1, file="parport.out" - -#======================================================================= -# SB16: -# This defines the SB16 sound emulation. It can have several of the -# following properties. -# All properties are in the format sb16: property=value -# midi: The filename is where the midi data is sent. This can be a -# device or just a file if you want to record the midi data. -# midimode: -# 0=no data -# 1=output to device (system dependent. midi denotes the device driver) -# 2=SMF file output, including headers -# 3=output the midi data stream to the file (no midi headers and no -# delta times, just command and data bytes) -# wave: This is the device/file where wave output is stored -# wavemode: -# 0=no data -# 1=output to device (system dependent. wave denotes the device driver) -# 2=VOC file output, incl. headers -# 3=output the raw wave stream to the file -# log: The file to write the sb16 emulator messages to. -# loglevel: -# 0=no log -# 1=resource changes, midi program and bank changes -# 2=severe errors -# 3=all errors -# 4=all errors plus all port accesses -# 5=all errors and port accesses plus a lot of extra info -# dmatimer: -# microseconds per second for a DMA cycle. Make it smaller to fix -# non-continuous sound. 750000 is usually a good value. This needs a -# reasonably correct setting for the IPS parameter of the CPU option. -# -# For an example look at the next line: -#======================================================================= - -#sb16: midimode=1, midi=/dev/midi00, wavemode=1, wave=/dev/dsp, loglevel=2, log=sb16.log, dmatimer=600000 - -#======================================================================= -# VGA_UPDATE_INTERVAL: -# Video memory is scanned for updates and screen updated every so many -# virtual seconds. The default is 40000, about 25Hz. Keep in mind that -# you must tweak the 'cpu: ips=N' directive to be as close to the number -# of emulated instructions-per-second your workstation can do, for this -# to be accurate. -# -# Examples: -# vga_update_interval: 250000 -#======================================================================= -vga_update_interval: 300000 - -# using for Winstone '98 tests -#vga_update_interval: 100000 - -#======================================================================= -# KEYBOARD_SERIAL_DELAY: -# Approximate time in microseconds that it takes one character to -# be transfered from the keyboard to controller over the serial path. -# Examples: -# keyboard_serial_delay: 200 -#======================================================================= -keyboard_serial_delay: 250 - -#======================================================================= -# KEYBOARD_PASTE_DELAY: -# Approximate time in microseconds between attempts to paste -# characters to the keyboard controller. This leaves time for the -# guest os to deal with the flow of characters. The ideal setting -# depends on how your operating system processes characters. The -# default of 100000 usec (.1 seconds) was chosen because it works -# consistently in Windows. -# -# If your OS is losing characters during a paste, increase the paste -# delay until it stops losing characters. -# -# Examples: -# keyboard_paste_delay: 100000 -#======================================================================= -keyboard_paste_delay: 100000 - -#======================================================================= -# MOUSE: -# This option prevents Bochs from creating mouse "events" unless a mouse -# is enabled. The hardware emulation itself is not disabled by this. -# You can turn the mouse on by setting enabled to 1, or turn it off by -# setting enabled to 0. Unless you have a particular reason for enabling -# the mouse by default, it is recommended that you leave it off. -# You can also toggle the mouse usage at runtime (control key + middle -# mouse button on X11, SDL, wxWidgets and Win32). -# With the mouse type option you can select the type of mouse to emulate. -# The default value is 'ps2'. The other choices are 'imps2' (wheel mouse -# on PS/2), 'serial', 'serial_wheel' (one com port requires setting -# 'mode=mouse') and 'usb' (3-button mouse - one of the USB ports must be -# connected with the 'mouse' device - requires PCI and USB support). -# -# Examples: -# mouse: enabled=1 -# mouse: enabled=1, type=imps2 -# mouse: enabled=1, type=serial -# mouse: enabled=0 -#======================================================================= -mouse: enabled=0 - -#======================================================================= -# private_colormap: Request that the GUI create and use it's own -# non-shared colormap. This colormap will be used -# when in the bochs window. If not enabled, a -# shared colormap scheme may be used. Not implemented -# on all GUI's. -# -# Examples: -# private_colormap: enabled=1 -# private_colormap: enabled=0 -#======================================================================= -private_colormap: enabled=0 - -#======================================================================= -# fullscreen: ONLY IMPLEMENTED ON AMIGA -# Request that Bochs occupy the entire screen instead of a -# window. -# -# Examples: -# fullscreen: enabled=0 -# fullscreen: enabled=1 -#======================================================================= -#fullscreen: enabled=0 -#screenmode: name="sample" - -#======================================================================= -# ne2k: NE2000 compatible ethernet adapter -# -# Examples: -# ne2k: ioaddr=IOADDR, irq=IRQ, mac=MACADDR, ethmod=MODULE, ethdev=DEVICE, script=SCRIPT -# -# ioaddr, irq: You probably won't need to change ioaddr and irq, unless there -# are IRQ conflicts. -# -# mac: The MAC address MUST NOT match the address of any machine on the net. -# Also, the first byte must be an even number (bit 0 set means a multicast -# address), and you cannot use ff:ff:ff:ff:ff:ff because that's the broadcast -# address. For the ethertap module, you must use fe:fd:00:00:00:01. There may -# be other restrictions too. To be safe, just use the b0:c4... address. -# -# ethdev: The ethdev value is the name of the network interface on your host -# platform. On UNIX machines, you can get the name by running ifconfig. On -# Windows machines, you must run niclist to get the name of the ethdev. -# Niclist source code is in misc/niclist.c and it is included in Windows -# binary releases. -# -# script: The script value is optional, and is the name of a script that -# is executed after bochs initialize the network interface. You can use -# this script to configure this network interface, or enable masquerading. -# This is mainly useful for the tun/tap devices that only exist during -# Bochs execution. The network interface name is supplied to the script -# as first parameter -# -# If you don't want to make connections to any physical networks, -# you can use the following 'ethmod's to simulate a virtual network. -# null: All packets are discarded, but logged to a few files. -# arpback: ARP is simulated. Disabled by default. -# vde: Virtual Distributed Ethernet -# vnet: ARP, ICMP-echo(ping), DHCP and read/write TFTP are simulated. -# The virtual host uses 192.168.10.1. -# DHCP assigns 192.168.10.2 to the guest. -# TFTP uses the ethdev value for the root directory and doesn't -# overwrite files. -# -#======================================================================= -# ne2k: ioaddr=0x240, irq=9, mac=fe:fd:00:00:00:01, ethmod=fbsd, ethdev=en0 #macosx -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0 -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:01, ethmod=win32, ethdev=MYCARD -# ne2k: ioaddr=0x240, irq=9, mac=fe:fd:00:00:00:01, ethmod=tap, ethdev=tap0 -# ne2k: ioaddr=0x240, irq=9, mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun0, script=./tunconfig -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:01, ethmod=null, ethdev=eth0 -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:01, ethmod=vde, ethdev="/tmp/vde.ctl" -# ne2k: ioaddr=0x240, irq=9, mac=b0:c4:20:00:00:01, ethmod=vnet, ethdev="c:/temp" -pnic: mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun:tap0 -#ne2k: ioaddr=0x240, irq=9, mac=fe:fd:00:00:00:01, ethmod=tuntap, ethdev=/dev/net/tun:tap0 - -#======================================================================= -# KEYBOARD_MAPPING: -# This enables a remap of a physical localized keyboard to a -# virtualized us keyboard, as the PC architecture expects. -# If enabled, the keymap file must be specified. -# -# Examples: -# keyboard_mapping: enabled=1, map=gui/keymaps/x11-pc-de.map -#======================================================================= -keyboard_mapping: enabled=0, map= - -#======================================================================= -# KEYBOARD_TYPE: -# Type of keyboard return by a "identify keyboard" command to the -# keyboard controler. It must be one of "xt", "at" or "mf". -# Defaults to "mf". It should be ok for almost everybody. A known -# exception is french macs, that do have a "at"-like keyboard. -# -# Examples: -# keyboard_type: mf -#======================================================================= -#keyboard_type: mf - -#======================================================================= -# USER_SHORTCUT: -# This defines the keyboard shortcut to be sent when you press the "user" -# button in the headerbar. The shortcut string is a combination of maximum -# 3 key names (listed below) separated with a '-' character. The old-style -# syntax (without the '-') still works for the key combinations supported -# in Bochs 2.2.1. -# Valid key names: -# "alt", "bksl", "bksp", "ctrl", "del", "down", "end", "enter", "esc", -# "f1", ... "f12", "home", "ins", "left", "menu", "minus", "pgdwn", "pgup", -# "plus", "right", "shift", "space", "tab", "up", and "win". -# -# Example: -# user_shortcut: keys=ctrl-alt-del -#======================================================================= -user_shortcut: keys=ctrl-alt-del - -#======================================================================= -# I440FXSUPPORT: -# This option controls the presence of the i440FX PCI chipset. You can -# also specify the devices connected to PCI slots. Up to 5 slots are -# available now. These devices are currently supported: ne2k, pcivga, -# pcidev and pcipnic. If Bochs is compiled with Cirrus SVGA support -# you'll have the additional choice 'cirrus'. -# -# Example: -# i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k -#======================================================================= -i440fxsupport: enabled=1, slot1=pcipnic -#i440fxsupport: enabled=1, slot1=ne2k - -#======================================================================= -# USB1: -# This option controls the presence of the USB root hub which is a part -# of the i440FX PCI chipset. With the portX option you can connect devices -# to the hub (currently supported: 'mouse' and 'keypad'). If you connect -# the mouse to one of the ports and use the mouse option 'type=usb' you'll -# have a 3-button USB mouse. -# -# Example: -# usb1: enabled=1, port1=mouse, port2=keypad -#======================================================================= -#usb1: enabled=1 - -#======================================================================= -# CMOSIMAGE: -# This defines image file that can be loaded into the CMOS RAM at startup. -# The rtc_init parameter controls whether initialize the RTC with values stored -# in the image. By default the time0 argument given to the clock option is used. -# With 'rtc_init=image' the image is the source for the initial time. -# -# Example: -# cmosimage: file=cmos.img, rtc_init=image -#======================================================================= -#cmosimage: file=cmos.img, rtc_init=time0 - -#======================================================================= -# other stuff -#======================================================================= -magic_break: enabled=1 -#load32bitOSImage: os=nullkernel, path=../kernel.img, iolog=../vga_io.log -#load32bitOSImage: os=linux, path=../linux.img, iolog=../vga_io.log, initrd=../initrd.img -#text_snapshot_check: enable - -#------------------------- -# PCI host device mapping -#------------------------- -#pcidev: vendor=0x1234, device=0x5678 - -#======================================================================= -# GDBSTUB: -# Enable GDB stub. See user documentation for details. -# Default value is enabled=0. -#======================================================================= -#gdbstub: enabled=0, port=1234, text_base=0, data_base=0, bss_base=0 - -#======================================================================= -# IPS: -# The IPS directive is DEPRECATED. Use the parameter IPS of the CPU -# directive instead. -#======================================================================= -#ips: 10000000 - -#======================================================================= -# for Macintosh, use the style of pathnames in the following -# examples. -# -# vgaromimage: :bios:VGABIOS-elpin-2.40 -# romimage: file=:bios:BIOS-bochs-latest, address=0xf0000 -# floppya: 1_44=[fd:], status=inserted -#======================================================================= diff --git a/gpxe/contrib/bochs/qemu-patch b/gpxe/contrib/bochs/qemu-patch deleted file mode 100644 index 5fb6c09e..00000000 --- a/gpxe/contrib/bochs/qemu-patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: qemu/cpu-exec.c -=================================================================== -RCS file: /sources/qemu/qemu/cpu-exec.c,v -retrieving revision 1.84 -diff -u -r1.84 cpu-exec.c ---- qemu/cpu-exec.c 29 Jul 2006 19:09:31 -0000 1.84 -+++ qemu/cpu-exec.c 28 Aug 2006 01:54:15 -0000 -@@ -788,6 +788,18 @@ - cpu_loop_exit(); - } - #endif -+#if 1 -+#define MIN_CYCLE_COUNT 100 -+ { -+ static int cycle_count; -+ -+ if (++cycle_count > MIN_CYCLE_COUNT) { -+ cycle_count = 0; -+ env->exception_index = EXCP_INTERRUPT; -+ cpu_loop_exit(); -+ } -+ } -+#endif - } - } else { - env_to_regs(); diff --git a/gpxe/contrib/bochs/serial-console b/gpxe/contrib/bochs/serial-console deleted file mode 100755 index 8cd3835c..00000000 --- a/gpxe/contrib/bochs/serial-console +++ /dev/null @@ -1,278 +0,0 @@ -#!/usr/bin/perl -w - -=head1 NAME - -serial-console - -=head1 SYNOPSIS - -serial-console [options] - -Options: - - -h,--help Display brief help message - -v,--verbose Increase verbosity - -q,--quiet Decrease verbosity - -l,--log FILE Log output to file - -r,--rcfile FILE Modify specified bochsrc file - -=head1 DESCRIPTION - -C<serial-console> provides a virtual serial console for use with -Bochs. Running C<serial-console> creates a pseudo-tty. The master -side of this pty is made available to the user for interaction; the -slave device is written to the Bochs configuration file -(C<bochsrc.txt>) for use by a subsequent Bochs session. - -=head1 EXAMPLES - -=over 4 - -=item C<serial-console> - -Create a virtual serial console for Bochs, modify C<bochsrc.txt> -appropriately. - -=item C<serial-console -r ../.bochsrc -l serial.log> - -Create a virtual serial console for Bochs, modify C<../.bochsrc> -appropriately, log output to C<serial.log>. - -=back - -=head1 INVOCATION - -Before starting Bochs, run C<serial-console> in a different session -(e.g. a different xterm window). When you subsequently start Bochs, -anything that the emulated machine writes to its serial port will -appear in the window running C<serial-console>, and anything typed in -the C<serial-console> window will arrive on the emulated machine's -serial port. - -You do B<not> need to rerun C<serial-console> afresh for each Bochs -session. - -=head1 OPTIONS - -=over 4 - -=item B<-l,--log FILE> - -Log all output (i.e. everything that is printed in the -C<serial-console> window) to the specified file. - -=item B<-r,--rcfile FILE> - -Modify the specified bochsrc file. The file will be updated to -contain the path to the slave side of the psuedo tty that we create. -The original file will be restored when C<serial-console> exits. The -default is to modify the file C<bochsrc.txt> in the current directory. - -To avoid modifying any bochsrc file, use C<--norcfile>. - -=back - -=cut - -use IO::Pty; -use IO::Select; -use File::Spec::Functions qw ( :ALL ); -use Getopt::Long; -use Pod::Usage; -use POSIX qw ( :termios_h ); -use strict; -use warnings; - -my $o; -my $restore_file = {}; -my $restore_termios; -use constant BLOCKSIZE => 8192; - -############################################################################## -# -# Parse command line options into options hash ($o) -# -# $o = parse_opts(); - -sub parse_opts { - # $o is the hash that will hold the options - my $o = { - verbosity => 1, - rcfile => 'bochsrc.txt', - }; - # Special handlers for some options - my $opt_handlers = { - verbose => sub { $o->{verbosity}++; }, - quiet => sub { $o->{verbosity}--; }, - help => sub { pod2usage(1); }, - norcfile => sub { delete $o->{rcfile}; }, - }; - # Merge handlers into main options hash (so that Getopt::Long can find them) - $o->{$_} = $opt_handlers->{$_} foreach keys %$opt_handlers; - # Option specifiers for Getopt::Long - my @optspec = ( 'help|h|?', - 'quiet|q+', - 'verbose|v+', - 'log|l=s', - 'rcfile|r=s', - 'norcfile', - ); - # Do option parsing - Getopt::Long::Configure ( 'bundling' ); - pod2usage("Error parsing command-line options") unless GetOptions ( - $o, @optspec ); - # Clean up $o by removing the handlers - delete $o->{$_} foreach keys %$opt_handlers; - return $o; -} - -############################################################################## -# -# Modify bochsrc file - -sub patch_bochsrc { - my $active = shift; - my $pty = shift; - - # Rename active file to backup file - ( my $vol, my $dir, my $file ) = splitpath ( $active ); - $file = '.'.$file.".serial-console"; - my $backup = catpath ( $vol, $dir, $file ); - rename $active, $backup - or die "Could not back up $active to $backup: $!\n"; - - # Derive line to be inserted - my $patch = "com1: enabled=1, mode=term, dev=$pty\n"; - - # Modify file - open my $old, "<$backup" or die "Could not open $backup: $!\n"; - open my $new, ">$active" or die "Could not open $active: $!\n"; - print $new <<"EOF"; -################################################## -# -# This file has been modified by serial-console. -# -# Do not modify this file; it will be erased when -# serial-console (pid $$) exits and will be -# replaced with the backup copy held in -# $backup. -# -################################################## - - -EOF - my $patched; - while ( my $line = <$old> ) { - if ( $line =~ /^\s*\#?\s*com1:\s*\S/ ) { - if ( ! $patched ) { - $line = $patch; - $patched = 1; - } else { - $line = '# '.$line unless $line =~ /^\s*\#/; - } - } - print $new $line; - } - print $new $patch unless $patched; - close $old; - close $new; - - return $backup; -} - -############################################################################## -# -# Attach/detach message printing and terminal settings - -sub bochs_attached { - print STDERR "Bochs attached.\n\n\n" - if $o->{verbosity} >= 1; -} - -sub bochs_detached { - print STDERR "\n\nWaiting for bochs to attach...\n" - if $o->{verbosity} >= 1; -} - -############################################################################## -# -# Main program - -$o = parse_opts(); -pod2usage(1) if @ARGV; - -# Catch signals -my $sigdie = sub { die "Exiting via signal\n"; }; -$SIG{INT} = $sigdie; - -# Create Pty, close slave side -my $pty = IO::Pty->new(); -$pty->close_slave(); -$pty->set_raw(); -print STDERR "Slave pty is ".$pty->ttyname."\n" if $o->{verbosity} >= 1; - -# Open logfile -my $log; -if ( $o->{log} ) { - open $log, ">$o->{log}" or die "Could not open $o->{log}: $!\n"; -} - -# Set up terminal -my $termios; -if ( -t STDIN ) { - $termios = POSIX::Termios->new; - $restore_termios = POSIX::Termios->new; - $termios->getattr ( fileno(STDIN) ); - $restore_termios->getattr ( fileno(STDIN) ); - $termios->setlflag ( $termios->getlflag & ~(ICANON) & ~(ECHO) ); - $termios->setiflag ( $termios->getiflag & ~(ICRNL) ); - $termios->setattr ( fileno(STDIN), TCSANOW ); -} - -# Modify bochsrc file -$restore_file = { $o->{rcfile} => - patch_bochsrc ( $o->{rcfile}, $pty->ttyname ) } - if $o->{rcfile}; - -# Start character shunt -my $attached = 1; -my $select = IO::Select->new ( \*STDIN, $pty ); -while ( 1 ) { - my %can_read = map { $_ => 1 } - $select->can_read ( $attached ? undef : 1 ); - if ( $can_read{\*STDIN} ) { - sysread ( STDIN, my $data, BLOCKSIZE ) - or die "Cannot read from STDIN: $!\n"; - $pty->syswrite ( $data ); - } - if ( $can_read{$pty} ) { - if ( $pty->sysread ( my $data, BLOCKSIZE ) ) { - # Actual data available - bochs_attached() if $attached == 0; - $attached = 1; - syswrite ( STDOUT, $data ); - $log->syswrite ( $data ) if $log; - } else { - # No data available but select() says we can read. This almost - # certainly indicates that nothing is attached to the slave. - bochs_detached() if $attached == 1; - $attached = 0; - sleep ( 1 ); - } - } else { - bochs_attached() if $attached == 0; - $attached = 1; - } -} - -END { - # Restore bochsrc file if applicable - if ( ( my $orig_file, my $backup_file ) = %$restore_file ) { - unlink $orig_file; - rename $backup_file, $orig_file; - } - # Restore terminal settings if applicable - if ( $restore_termios ) { - $restore_termios->setattr ( fileno(STDIN), TCSANOW ); - } -} diff --git a/gpxe/contrib/bochs/serial-console.1 b/gpxe/contrib/bochs/serial-console.1 deleted file mode 100644 index 210de550..00000000 --- a/gpxe/contrib/bochs/serial-console.1 +++ /dev/null @@ -1,191 +0,0 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 -.\" -.\" Standard preamble: -.\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` "" -. ds C' "" -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index -.\" entries marked with X<> in POD. Of course, you'll have to process the -.\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ======================================================================== -.\" -.IX Title "SERIAL-CONSOLE 1" -.TH SERIAL-CONSOLE 1 "2004-03-10" "perl v5.8.0" "User Contributed Perl Documentation" -.SH "NAME" -serial\-console -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -serial-console [options] -.PP -Options: -.PP -.Vb 5 -\& -h,--help Display brief help message -\& -v,--verbose Increase verbosity -\& -q,--quiet Decrease verbosity -\& -l,--log FILE Log output to file -\& -r,--rcfile FILE Modify specified bochsrc file -.Ve -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`serial\-console\*(C'\fR provides a virtual serial console for use with -Bochs. Running \f(CW\*(C`serial\-console\*(C'\fR creates a pseudo\-tty. The master -side of this pty is made available to the user for interaction; the -slave device is written to the Bochs configuration file -(\f(CW\*(C`bochsrc.txt\*(C'\fR) for use by a subsequent Bochs session. -.SH "EXAMPLES" -.IX Header "EXAMPLES" -.ie n .IP """serial\-console""" 4 -.el .IP "\f(CWserial\-console\fR" 4 -.IX Item "serial-console" -Create a virtual serial console for Bochs, modify \f(CW\*(C`bochsrc.txt\*(C'\fR -appropriately. -.ie n .IP """serial\-console \-r ../.bochsrc \-l serial.log""" 4 -.el .IP "\f(CWserial\-console \-r ../.bochsrc \-l serial.log\fR" 4 -.IX Item "serial-console -r ../.bochsrc -l serial.log" -Create a virtual serial console for Bochs, modify \f(CW\*(C`../.bochsrc\*(C'\fR -appropriately, log output to \f(CW\*(C`serial.log\*(C'\fR. -.SH "INVOCATION" -.IX Header "INVOCATION" -Before starting Bochs, run \f(CW\*(C`serial\-console\*(C'\fR in a different session -(e.g. a different xterm window). When you subsequently start Bochs, -anything that the emulated machine writes to its serial port will -appear in the window running \f(CW\*(C`serial\-console\*(C'\fR, and anything typed in -the \f(CW\*(C`serial\-console\*(C'\fR window will arrive on the emulated machine's -serial port. -.PP -You do \fBnot\fR need to rerun \f(CW\*(C`serial\-console\*(C'\fR afresh for each Bochs -session. -.SH "OPTIONS" -.IX Header "OPTIONS" -.IP "\fB\-l,\-\-log \s-1FILE\s0\fR" 4 -.IX Item "-l,--log FILE" -Log all output (i.e. everything that is printed in the -\&\f(CW\*(C`serial\-console\*(C'\fR window) to the specified file. -.IP "\fB\-r,\-\-rcfile \s-1FILE\s0\fR" 4 -.IX Item "-r,--rcfile FILE" -Modify the specified bochsrc file. The file will be updated to -contain the path to the slave side of the psuedo tty that we create. -The original file will be restored when \f(CW\*(C`serial\-console\*(C'\fR exits. The -default is to modify the file \f(CW\*(C`bochsrc.txt\*(C'\fR in the current directory. -.Sp -To avoid modifying any bochsrc file, use \f(CW\*(C`\-\-norcfile\*(C'\fR. diff --git a/gpxe/contrib/bochs/tunctl.c b/gpxe/contrib/bochs/tunctl.c deleted file mode 100644 index 6e439060..00000000 --- a/gpxe/contrib/bochs/tunctl.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright 2002 Jeff Dike - * Licensed under the GPL - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <fcntl.h> -#include <unistd.h> -#include <pwd.h> -#include <net/if.h> -#include <sys/ioctl.h> -#include <linux/if_tun.h> - -static void Usage(char *name) -{ - fprintf(stderr, "Create: %s [-b] [-u owner] [-t device-name] " - "[-f tun-clone-device]\n", name); - fprintf(stderr, "Delete: %s -d device-name [-f tun-clone-device]\n\n", - name); - fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems" - " use\n/dev/misc/net/tun instead\n\n"); - fprintf(stderr, "-b will result in brief output (just the device name)\n"); - exit(1); -} - -int main(int argc, char **argv) -{ - struct ifreq ifr; - struct passwd *pw; - long owner = geteuid(); - int tap_fd, opt, delete = 0, brief = 0; - char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end; - - while((opt = getopt(argc, argv, "bd:f:t:u:")) > 0){ - switch(opt) { - case 'b': - brief = 1; - break; - case 'd': - delete = 1; - tun = optarg; - break; - case 'f': - file = optarg; - break; - case 'u': - pw = getpwnam(optarg); - if(pw != NULL){ - owner = pw->pw_uid; - break; - } - owner = strtol(optarg, &end, 0); - if(*end != '\0'){ - fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n", - optarg); - Usage(name); - } - break; - case 't': - tun = optarg; - break; - case 'h': - default: - Usage(name); - } - } - - argv += optind; - argc -= optind; - - if(argc > 0) - Usage(name); - - if((tap_fd = open(file, O_RDWR)) < 0){ - fprintf(stderr, "Failed to open '%s' : ", file); - perror(""); - exit(1); - } - - memset(&ifr, 0, sizeof(ifr)); - - ifr.ifr_flags = IFF_TAP | IFF_NO_PI; - strncpy(ifr.ifr_name, tun, sizeof(ifr.ifr_name) - 1); - if(ioctl(tap_fd, TUNSETIFF, (void *) &ifr) < 0){ - perror("TUNSETIFF"); - exit(1); - } - - if(delete){ - if(ioctl(tap_fd, TUNSETPERSIST, 0) < 0){ - perror("TUNSETPERSIST"); - exit(1); - } - printf("Set '%s' nonpersistent\n", ifr.ifr_name); - } - else { - if(ioctl(tap_fd, TUNSETPERSIST, 1) < 0){ - perror("TUNSETPERSIST"); - exit(1); - } - if(ioctl(tap_fd, TUNSETOWNER, owner) < 0){ - perror("TUNSETPERSIST"); - exit(1); - } - if(brief) - printf("%s\n", ifr.ifr_name); - else printf("Set '%s' persistent and owned by uid %ld\n", ifr.ifr_name, - owner); - } - return(0); -} diff --git a/gpxe/contrib/bootptodhcp/bootptodhcp.pl b/gpxe/contrib/bootptodhcp/bootptodhcp.pl deleted file mode 100755 index c8d6465a..00000000 --- a/gpxe/contrib/bootptodhcp/bootptodhcp.pl +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl -w -# -# Quick hack to convert /etc/bootptab to format required by ISC DHCPD -# This only outputs the fixed hosts portion of the config file -# You still have to provide the global options and the subnet scoping -# -# Turn $useipaddr on if you prefer to use IP addresses in the config file -# I run DNS so I prefer domain names -$useipaddr = 0; -# This will be appended to get the FQDN unless the hostname is already FQDN -$domainname = "ken.com.au"; -$tftpdir = "/tftpdir/"; -open(B, "/etc/bootptab") or die "/etc/bootptab: $!\n"; -while(<B>) { - if (/^[^a-z]/) { - $prevline = $_; - next; - } - chomp($_); - ($hostname, @tags) = split(/:/, $_, 5); - ($fqdn = $hostname) .= ".$domainname" unless($hostname =~ /\./); - ($macaddr) = grep(/^ha=/, @tags); - $macaddr =~ s/ha=//; - $macaddr =~ s/(..)(..)(..)(..)(..)(..)/$1:$2:$3:$4:$5:$6/g; - ($ipaddr) = grep(/^ip=/, @tags); - $ipaddr =~ s/ip=//; - ($bootfile) = grep(/^bf=/, @tags); - $bootfile =~ s/bf=//; - $bootfile = $tftpdir . $bootfile; -# I have a comment line above most entries and I like to carry this over - print $prevline if ($prevline =~ /^#/); - $address = $useipaddr ? $ipaddr : $fqdn; - print <<EOF - host $hostname { - hardware ethernet $macaddr; - fixed-address $address; - filename "$bootfile"; - } -EOF -; - $prevline = $_; -} diff --git a/gpxe/contrib/compressor/COPYING b/gpxe/contrib/compressor/COPYING deleted file mode 100644 index e574f7cd..00000000 --- a/gpxe/contrib/compressor/COPYING +++ /dev/null @@ -1,23 +0,0 @@ -The compression code as implemented in "lzhuf.c" was taken from a BBS -program written by Joachim Schurig <jschurig@zedat.fu-berlin.de>. He -states that the code can be used freely for programs that are covered -by a "freeware" license. This probably includes both BSD style -licenses and the GPL. - -The code in "loader.asm" is a reimplementation of the uncompressor. It -has been written from scratch and is hereby placed under the -conditions of the GNU General Public License (GPL). The algorithm is -outlined in "algorithm.doc". - -Thus, there are no copyright problems with using this code, but there -still might be difficulties with software patents. These patents are -not legal in most parts of the world, but if you live in a country -that honors software patents then you should verify that using these -algorithms is legally permitted. Unless you are absolutely sure, that -there are no legal obstacles, you should use the code for educational -purposes only (this assumes that your educational institution is -exempted from patent laws). The author cannot be held responsible for -using the program code in violation of applicable local laws. - -If you are aware of patents that might affect the legality of using -the code in some parts of the world, please let me know. diff --git a/gpxe/contrib/compressor/algorithm.doc b/gpxe/contrib/compressor/algorithm.doc deleted file mode 100644 index 74a7646c..00000000 --- a/gpxe/contrib/compressor/algorithm.doc +++ /dev/null @@ -1,58 +0,0 @@ -The compressor achieves an average compression rate of 60% of the -original size which is on par with "gzip". It seems that you cannot do -much better for compressing compiled binaries. This means that the -break even point for using compressed images is reached, once the -uncompressed size approaches 1.5kB. We can stuff more than 12kB into -an 8kB EPROM and more than 25kB into an 16kB EPROM. As there is only -32kB of RAM for both the uncompressed image and its BSS area, this -means that 32kB EPROMs will hardly ever be required. - -The compression algorithm uses a 4kB ring buffer for buffering the -uncompressed data. Before compression starts, the ring buffer is -filled with spaces (ASCII character 0x20). The algorithm tries to -find repeated input sequences of a maximum length of 60 bytes. All -256 different input bytes plus the 58 (60 minus a threshold of 2) -possible repeat lengths form a set of 314 symbols. These symbols are -adaptively Huffman encoded. The algorithm starts out with a Huffmann -tree that assigns equal code lengths to each of the 314 symbols -(slightly favoring the repeat symbols over symbols for regular input -characters), but it will be changed whenever the frequency of any of -the symbols changes. Frequency counts are kept in 16bit words until -the total number of compressed codes totals 2^15. Then, all frequency -counts will be halfed (rounding to the bigger number). For unrepeated -characters (symbols 0..255) the Huffman code is written to the output -stream. For repeated characters the Huffmann code, which denotes the -length of the repeated character sequence, is written out and then the -index in the ring buffer is computed. From this index, the algorithm -computes the offset relative to the current index into the ring -buffer. Thus, for typical input data, one would expect that short to -medium range offsets are more frequent than extremely short or medium -range to long range offsets. Thus the 12bit (for a 4kB buffer) offset -value is statically Huffman encoded using a precomputed Huffman tree -that favors those offset values that are deemed to be more -frequent. The Huffman encoded offset is written to the output data -stream, directly following the code that determines the length of -repeated characters. - -This algorithm, as implemented in the C example code, looks very good -and its operating parameters are already well optimized. This also -explains why it achieves compression ratios comparable with -"gzip". Depending on the input data, it sometimes excells considerably -beyond what "gzip -9" does, but this phenomenon does not appear to be -typical. There are some flaws with the algorithm, such as the limited -buffer sizes, the adaptive Huffman tree which takes very long to -change, if the input characters experience a sudden change in -distribution, and the static Huffman tree for encoding offsets into -the buffer. The slow changes of the adaptive Huffman tree are -partially counteracted by artifically keeping a 16bit precision for -the frequency counts, but this does not come into play until 32kB of -compressed data is output, so it does not have any impact on our use -for "etherboot", because the BOOT Prom does not support uncompressed -data of more then 32kB (c.f. doc/spec.doc). - -Nonetheless, these problems do not seem to affect compression of -compiled programs very much. Mixing object code with English text, -would not work too well though, and the algorithm should be reset in -between. Actually, we might gain a little improvement, if text and -data segments were compressed individually, but I have not -experimented with this option, yet. diff --git a/gpxe/contrib/compressor/loader.h b/gpxe/contrib/compressor/loader.h deleted file mode 100644 index 20fa9af3..00000000 --- a/gpxe/contrib/compressor/loader.h +++ /dev/null @@ -1,14 +0,0 @@ -/* Do not change these values unless you really know what you are doing; - the pre-computed lookup tables rely on the buffer size being 4kB or - smaller. The buffer size must be a power of two. The lookahead size has - to fit into 6 bits. If you change any of these numbers, you will also - have to adjust the decompressor accordingly. - */ - -#define BUFSZ 4096 -#define LOOKAHEAD 60 -#define THRESHOLD 2 -#define NCHAR (256+LOOKAHEAD-THRESHOLD) -#define TABLESZ (NCHAR+NCHAR-1) -#define NIL ((unsigned short)-1) - diff --git a/gpxe/contrib/compressor/lzhuf.c b/gpxe/contrib/compressor/lzhuf.c deleted file mode 100644 index ea65b5e0..00000000 --- a/gpxe/contrib/compressor/lzhuf.c +++ /dev/null @@ -1,764 +0,0 @@ -/* ----------------------------------------------------------------------------- - -M. LZHuf Compression - -This is the LZHuf compression algorithm as used in DPBOX and F6FBB. - ----------------------------------------------------------------------------- -*/ -/************************************************************** - lzhuf.c - written by Haruyasu Yoshizaki 11/20/1988 - some minor changes 4/6/1989 - comments translated by Haruhiko Okumura 4/7/1989 - - minor beautifications and adjustments for compiling under Linux - by Markus Gutschke <gutschk@math.uni-muenster.de> - 1997-01-27 - - Modifications to allow use as a filter by Ken Yap <ken_yap@users.sourceforge.net>. - 1997-07-01 - - Small mod to cope with running on big-endian machines - by Jim Hague <jim.hague@acm.org) - 1998-02-06 - - Make compression statistics report shorter - by Ken Yap <ken_yap@users.sourceforge.net>. - 2001-04-25 -**************************************************************/ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> - -#ifndef VERBOSE -#define Fprintf(x) -#define wterr 0 -#else -#define Fprintf(x) fprintf x -#if defined(ENCODE) || defined(DECODE) -static char wterr[] = "Can't write."; -#ifdef ENCODE -static unsigned long int codesize = 0; -#endif -static unsigned long int printcount = 0; -#endif -#endif - -#ifndef MAIN -extern -#endif -FILE *infile, *outfile; - -#if defined(ENCODE) || defined(DECODE) -static unsigned long int textsize = 0; - -static __inline__ void Error(char *message) -{ - Fprintf((stderr, "\n%s\n", message)); - exit(EXIT_FAILURE); -} - -/* These will be a complete waste of time on a lo-endian */ -/* system, but it only gets done once so WTF. */ -static unsigned long i86ul_to_host(unsigned long ul) -{ - unsigned long res = 0; - int i; - union - { - unsigned char c[4]; - unsigned long ul; - } u; - - u.ul = ul; - for (i = 3; i >= 0; i--) - res = (res << 8) + u.c[i]; - return res; -} - -static unsigned long host_to_i86ul(unsigned long ul) -{ - int i; - union - { - unsigned char c[4]; - unsigned long ul; - } u; - - for (i = 0; i < 4; i++) - { - u.c[i] = ul & 0xff; - ul >>= 8; - } - return u.ul; -} -#endif - -/********** LZSS compression **********/ - -#define N 4096 /* buffer size */ -/* Attention: When using this file for f6fbb-type compressed data exchange, - set N to 2048 ! (DL8HBS) */ -#define F 60 /* lookahead buffer size */ -#define THRESHOLD 2 -#define NIL N /* leaf of tree */ - -#if defined(ENCODE) || defined(DECODE) -static unsigned char - text_buf[N + F - 1]; -#endif - -#ifdef ENCODE -static int match_position, match_length, - lson[N + 1], rson[N + 257], dad[N + 1]; - -static void InitTree(void) /* initialize trees */ -{ - int i; - - for (i = N + 1; i <= N + 256; i++) - rson[i] = NIL; /* root */ - for (i = 0; i < N; i++) - dad[i] = NIL; /* node */ -} - -static void InsertNode(int r) /* insert to tree */ -{ - int i, p, cmp; - unsigned char *key; - unsigned c; - - cmp = 1; - key = &text_buf[r]; - p = N + 1 + key[0]; - rson[r] = lson[r] = NIL; - match_length = 0; - for ( ; ; ) { - if (cmp >= 0) { - if (rson[p] != NIL) - p = rson[p]; - else { - rson[p] = r; - dad[r] = p; - return; - } - } else { - if (lson[p] != NIL) - p = lson[p]; - else { - lson[p] = r; - dad[r] = p; - return; - } - } - for (i = 1; i < F; i++) - if ((cmp = key[i] - text_buf[p + i]) != 0) - break; - if (i > THRESHOLD) { - if (i > match_length) { - match_position = ((r - p) & (N - 1)) - 1; - if ((match_length = i) >= F) - break; - } - if (i == match_length) { - if ((c = ((r - p) & (N - 1)) - 1) < match_position) { - match_position = c; - } - } - } - } - dad[r] = dad[p]; - lson[r] = lson[p]; - rson[r] = rson[p]; - dad[lson[p]] = r; - dad[rson[p]] = r; - if (rson[dad[p]] == p) - rson[dad[p]] = r; - else - lson[dad[p]] = r; - dad[p] = NIL; /* remove p */ -} - -static void DeleteNode(int p) /* remove from tree */ -{ - int q; - - if (dad[p] == NIL) - return; /* not registered */ - if (rson[p] == NIL) - q = lson[p]; - else - if (lson[p] == NIL) - q = rson[p]; - else { - q = lson[p]; - if (rson[q] != NIL) { - do { - q = rson[q]; - } while (rson[q] != NIL); - rson[dad[q]] = lson[q]; - dad[lson[q]] = dad[q]; - lson[q] = lson[p]; - dad[lson[p]] = q; - } - rson[q] = rson[p]; - dad[rson[p]] = q; - } - dad[q] = dad[p]; - if (rson[dad[p]] == p) - rson[dad[p]] = q; - else - lson[dad[p]] = q; - dad[p] = NIL; -} -#endif - -/* Huffman coding */ - -#define N_CHAR (256 - THRESHOLD + F) - /* kinds of characters (character code = 0..N_CHAR-1) */ -#define T (N_CHAR * 2 - 1) /* size of table */ -#define R (T - 1) /* position of root */ -#define MAX_FREQ 0x8000 /* updates tree when the */ - /* root frequency comes to this value. */ -typedef unsigned char uchar; - -/* table for encoding and decoding the upper 6 bits of position */ - -/* for encoding */ - -#ifdef ENCODE -static uchar p_len[64] = { - 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 -}; - -static uchar p_code[64] = { - 0x00, 0x20, 0x30, 0x40, 0x50, 0x58, 0x60, 0x68, - 0x70, 0x78, 0x80, 0x88, 0x90, 0x94, 0x98, 0x9C, - 0xA0, 0xA4, 0xA8, 0xAC, 0xB0, 0xB4, 0xB8, 0xBC, - 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, - 0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, - 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF -}; -#endif - -#ifdef DECODE -/* for decoding */ -static uchar d_code[256] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, - 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, - 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, - 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, - 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, - 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, - 0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B, - 0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F, - 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, - 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, - 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, - 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, -}; - -static uchar d_len[256] = { - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, -}; -#endif - -#if defined(ENCODE) || defined(DECODE) -static unsigned freq[T + 1]; /* frequency table */ - -static int prnt[T + N_CHAR]; /* pointers to parent nodes, except for the */ - /* elements [T..T + N_CHAR - 1] which are used to get */ - /* the positions of leaves corresponding to the codes. */ - -static int son[T]; /* pointers to child nodes (son[], son[] + 1) */ -#endif - -#ifdef DECODE -static unsigned getbuf = 0; -static uchar getlen = 0; - -static int GetBit(void) /* get one bit */ -{ - int i; - - while (getlen <= 8) { - if ((i = getc(infile)) < 0) i = 0; - getbuf |= i << (8 - getlen); - getlen += 8; - } - i = getbuf; - getbuf <<= 1; - getlen--; - return ((signed short)i < 0); -} - -static int GetByte(void) /* get one byte */ -{ - unsigned short i; - - while (getlen <= 8) { - if ((signed short)(i = getc(infile)) < 0) i = 0; - getbuf |= i << (8 - getlen); - getlen += 8; - } - i = getbuf; - getbuf <<= 8; - getlen -= 8; - return i >> 8; -} -#endif - -#ifdef ENCODE -static unsigned putbuf = 0; -static uchar putlen = 0; - -static void Putcode(int l, unsigned c) /* output c bits of code */ -{ - putbuf |= c >> putlen; - if ((putlen += l) >= 8) { - if (putc(putbuf >> 8, outfile) == EOF) { - Error(wterr); - } - if ((putlen -= 8) >= 8) { - if (putc(putbuf, outfile) == EOF) { - Error(wterr); - } -#ifdef VERBOSE - codesize += 2; -#endif - putlen -= 8; - putbuf = c << (l - putlen); - } else { - putbuf <<= 8; -#ifdef VERBOSE - codesize++; -#endif - } - } -} -#endif - -/* initialization of tree */ - -#if defined(ENCODE) || defined(DECODE) -static void StartHuff(void) -{ - int i, j; - - for (i = 0; i < N_CHAR; i++) { - freq[i] = 1; - son[i] = i + T; - prnt[i + T] = i; - } - i = 0; j = N_CHAR; - while (j <= R) { - freq[j] = freq[i] + freq[i + 1]; - son[j] = i; - prnt[i] = prnt[i + 1] = j; - i += 2; j++; - } - freq[T] = 0xffff; - prnt[R] = 0; -} - -/* reconstruction of tree */ - -static void reconst(void) -{ - int i, j, k; - unsigned f, l; - - /* collect leaf nodes in the first half of the table */ - /* and replace the freq by (freq + 1) / 2. */ - j = 0; - for (i = 0; i < T; i++) { - if (son[i] >= T) { - freq[j] = (freq[i] + 1) / 2; - son[j] = son[i]; - j++; - } - } - /* begin constructing tree by connecting sons */ - for (i = 0, j = N_CHAR; j < T; i += 2, j++) { - k = i + 1; - f = freq[j] = freq[i] + freq[k]; - for (k = j - 1; f < freq[k]; k--); - k++; - l = (j - k) * 2; - memmove(&freq[k + 1], &freq[k], l); - freq[k] = f; - memmove(&son[k + 1], &son[k], l); - son[k] = i; - } - /* connect prnt */ - for (i = 0; i < T; i++) { - if ((k = son[i]) >= T) { - prnt[k] = i; - } else { - prnt[k] = prnt[k + 1] = i; - } - } -} - -/* increment frequency of given code by one, and update tree */ - -static void update(int c) -{ - int i, j, k, l; - - if (freq[R] == MAX_FREQ) { - reconst(); - } - c = prnt[c + T]; - do { - k = ++freq[c]; - - /* if the order is disturbed, exchange nodes */ - if (k > freq[l = c + 1]) { - while (k > freq[++l]); - l--; - freq[c] = freq[l]; - freq[l] = k; - - i = son[c]; - prnt[i] = l; - if (i < T) prnt[i + 1] = l; - - j = son[l]; - son[l] = i; - - prnt[j] = c; - if (j < T) prnt[j + 1] = c; - son[c] = j; - - c = l; - } - } while ((c = prnt[c]) != 0); /* repeat up to root */ -} -#endif - -#ifdef ENCODE -#if 0 -static unsigned code, len; -#endif - -static void EncodeChar(unsigned c) -{ - unsigned i; - int j, k; - - i = 0; - j = 0; - k = prnt[c + T]; - - /* travel from leaf to root */ - do { - i >>= 1; - - /* if node's address is odd-numbered, choose bigger brother node */ - if (k & 1) i += 0x8000; - - j++; - } while ((k = prnt[k]) != R); - Putcode(j, i); -#if 0 - code = i; - len = j; -#endif - update(c); -} - -static void EncodePosition(unsigned c) -{ - unsigned i; - - /* output upper 6 bits by table lookup */ - i = c >> 6; - Putcode(p_len[i], (unsigned)p_code[i] << 8); - - /* output lower 6 bits verbatim */ - Putcode(6, (c & 0x3f) << 10); -} - -static void EncodeEnd(void) -{ - if (putlen) { - if (putc(putbuf >> 8, outfile) == EOF) { - Error(wterr); - } -#ifdef VERBOSE - codesize++; -#endif - } -} -#endif - -#ifdef DECODE -static int DecodeChar(void) -{ - unsigned c; - - c = son[R]; - - /* travel from root to leaf, */ - /* choosing the smaller child node (son[]) if the read bit is 0, */ - /* the bigger (son[]+1} if 1 */ - while (c < T) { - c += GetBit(); - c = son[c]; - } - c -= T; - update(c); - return c; -} - -static int DecodePosition(void) -{ - unsigned i, j, c; - - /* recover upper 6 bits from table */ - i = GetByte(); - c = (unsigned)d_code[i] << 6; - j = d_len[i]; - - /* read lower 6 bits verbatim */ - j -= 2; - while (j--) { - i = (i << 1) + GetBit(); - } - return c | (i & 0x3f); -} -#endif - -#ifdef ENCODE -/* compression */ - -void Encode(void) /* compression */ -{ - int i, c, len, r, s, last_match_length; - unsigned long tw; - - fseek(infile, 0L, 2); - textsize = ftell(infile); -#ifdef VERBOSE - if ((signed long)textsize < 0) - Fprintf((stderr, "Errno: %d", errno)); -#endif - tw = host_to_i86ul(textsize); - if (fwrite(&tw, sizeof tw, 1, outfile) < 1) - Error(wterr); /* output size of text */ - if (textsize == 0) - return; - rewind(infile); - textsize = 0; /* rewind and re-read */ - StartHuff(); - InitTree(); - s = 0; - r = N - F; - for (i = s; i < r; i++) - text_buf[i] = ' '; - for (len = 0; len < F && (c = getc(infile)) != EOF; len++) - text_buf[r + len] = c; - textsize = len; - for (i = 1; i <= F; i++) - InsertNode(r - i); - InsertNode(r); - do { - if (match_length > len) - match_length = len; - if (match_length <= THRESHOLD) { - match_length = 1; - EncodeChar(text_buf[r]); - } else { - EncodeChar(255 - THRESHOLD + match_length); - EncodePosition(match_position); - } - last_match_length = match_length; - for (i = 0; i < last_match_length && - (c = getc(infile)) != EOF; i++) { - DeleteNode(s); - text_buf[s] = c; - if (s < F - 1) - text_buf[s + N] = c; - s = (s + 1) & (N - 1); - r = (r + 1) & (N - 1); - InsertNode(r); - } - if ((textsize += i) > printcount) { -#if defined(VERBOSE) && defined(EXTRAVERBOSE) - Fprintf((stderr, "%12ld\r", textsize)); -#endif - printcount += 1024; - } - while (i++ < last_match_length) { - DeleteNode(s); - s = (s + 1) & (N - 1); - r = (r + 1) & (N - 1); - if (--len) InsertNode(r); - } - } while (len > 0); - EncodeEnd(); -#ifdef LONG_REPORT - Fprintf((stderr, "input size %ld bytes\n", codesize)); - Fprintf((stderr, "output size %ld bytes\n", textsize)); - Fprintf((stderr, "input/output %.3f\n", (double)codesize / textsize)); -#else - Fprintf((stderr, "input/output = %ld/%ld = %.3f\n", codesize, textsize, - (double)codesize / textsize)); -#endif -} -#endif - -#ifdef DECODE -void Decode(void) /* recover */ -{ - int i, j, k, r, c; - unsigned long int count; - unsigned long tw; - - if (fread(&tw, sizeof tw, 1, infile) < 1) - Error("Can't read"); /* read size of text */ - textsize = i86ul_to_host(tw); - if (textsize == 0) - return; - StartHuff(); - for (i = 0; i < N - F; i++) - text_buf[i] = ' '; - r = N - F; - for (count = 0; count < textsize; ) { - c = DecodeChar(); - if (c < 256) { - if (putc(c, outfile) == EOF) { - Error(wterr); - } - text_buf[r++] = c; - r &= (N - 1); - count++; - } else { - i = (r - DecodePosition() - 1) & (N - 1); - j = c - 255 + THRESHOLD; - for (k = 0; k < j; k++) { - c = text_buf[(i + k) & (N - 1)]; - if (putc(c, outfile) == EOF) { - Error(wterr); - } - text_buf[r++] = c; - r &= (N - 1); - count++; - } - } - if (count > printcount) { -#if defined(VERBOSE) && defined(EXTRAVERBOSE) - Fprintf((stderr, "%12ld\r", count)); -#endif - printcount += 1024; - } - } - Fprintf((stderr, "%12ld\n", count)); -} -#endif - -#ifdef MAIN -int main(int argc, char *argv[]) -{ - char *s; - FILE *f; - int c; - - if (argc == 2) { - outfile = stdout; - if ((f = tmpfile()) == NULL) { - perror("tmpfile"); - return EXIT_FAILURE; - } - while ((c = getchar()) != EOF) - fputc(c, f); - rewind(infile = f); - } - else if (argc != 4) { - Fprintf((stderr, "'lzhuf e file1 file2' encodes file1 into file2.\n" - "'lzhuf d file2 file1' decodes file2 into file1.\n")); - return EXIT_FAILURE; - } - if (argc == 4) { - if ((s = argv[1], s[1] || strpbrk(s, "DEde") == NULL) - || (s = argv[2], (infile = fopen(s, "rb")) == NULL) - || (s = argv[3], (outfile = fopen(s, "wb")) == NULL)) { - Fprintf((stderr, "??? %s\n", s)); - return EXIT_FAILURE; - } - } - if (toupper(*argv[1]) == 'E') - Encode(); - else - Decode(); - fclose(infile); - fclose(outfile); - return EXIT_SUCCESS; -} -#endif diff --git a/gpxe/contrib/dhcpdconfeg/dhcpd.conf b/gpxe/contrib/dhcpdconfeg/dhcpd.conf deleted file mode 100644 index 4d13e0f9..00000000 --- a/gpxe/contrib/dhcpdconfeg/dhcpd.conf +++ /dev/null @@ -1,16 +0,0 @@ -This is an example of using vendor tags in DHCPD config, supplied by -Bernd Wiebelt. - - -subnet 10.97.0.0 netmask 255.255.0.0 { - range 10.97.0.2 10.97.0.254; - option option-128 e4:45:74:68:0:0; - option option-160 "default=193"; - option option-184 "HALLO"; - option option-192 "Linux:::linux.tagged:"; - option option-193 "DOS Bootdisk:::dosboot.tagged"; - option option-194 "RH61 Bootdisk:::boot.tagged"; - option option-195 "Local Disk:::/dev/hda:85b103482a20682da703aa388933a6d8"; -} - - diff --git a/gpxe/contrib/dhcpdconfeg/vendorclassid.txt b/gpxe/contrib/dhcpdconfeg/vendorclassid.txt deleted file mode 100644 index 7b1f3910..00000000 --- a/gpxe/contrib/dhcpdconfeg/vendorclassid.txt +++ /dev/null @@ -1,140 +0,0 @@ -From: Dax Kelson -To: Etherboot users list -Subject: [Etherboot-users] Example ISC DHCP v3 dhcpd.conf using conditional operations -Date: Wed, 13 Jun 2001 20:22:21 -0600 - -Hopefully someone will find this useful. I spent a long time tracking -down and figuring out all the pieces. To the powers that be, feel free to -stick this in contrib if you like it. - -Goal: Use the vendor-class-identifier and ISC DHCP v3 "match" option to -conditionally send proper options only when the DHCP discover/request from -etherboot comes in. We use static-MAC-to-IP mappings for classroom -computers, and dynamic dhcp ranges for other clients (student laptops, -etc). - -I used Etherboot 5.0.1 and the patch (required) in this email: - -http://www.geocrawler.com/lists/3/SourceForge/5299/0/5952625/ - -Furture versions of Etherboot will likely already have this patch -included. - -Dax Kelson -Guru Labs - -######### Begin ISC DHCP v3 dhcpd.conf ############# - -ddns-update-style ad-hoc; - -# Global default, can be overridden -filename "/exports/kickstart/class1-rh7.1.ks"; - -# Define options for Etherboot -# There are more, these are just the ones I'm using -option ebootmagic code 128 = string; -option cmdline code 129 = string; -option menudflts code 160 = string; -option menuline1 code 192 = string; -option menuline2 code 193 = string; -option menuline3 code 194 = string; -option menuline4 code 195 = string; -option menuline5 code 196 = string; -option menuline6 code 197 = string; -option menuline7 code 198 = string; -option menuline8 code 199 = string; -option menuline9 code 200 = string; -option menuline10 code 201 = string; -option menuline11 code 202 = string; -option menuline12 code 203 = string; -option menuline13 code 204 = string; -option menuline14 code 205 = string; -option menuline15 code 206 = string; -option menuline16 code 207 = string; -option motdline1 code 184 = string; - -class "Etherboot" { - match if substring (option vendor-class-identifier, 0, 9) = "Etherboot"; - - option ebootmagic = E4:45:74:68:00:00; - -# We don't use this here, because different menu items require -# different cmdlines. In our ".nbi" files we specify the cmdlines - -# option cmdline = "ks initrd=initrd.img lang= devfs=nomount"; - - option motdline1 = "Welcome to Guru Labs classroom"; - - option menudflts = "timeout=30:default=192"; - - option menuline1 = "Boot from Hard Drive (Default):::/dev/hda:::"; - option menuline2 = "Boot from Floppy:::/dev/fd0:::"; - option menuline3 = "Boot from CDROM::::::"; - option menuline4 = "Kickstart install Red Hat 7.1:::rh71-ks-etherboot.nbi:::"; - option menuline5 = "Red Hat 7.1 network rescue:::rh71-rescue-etherboot.nbi:::"; - option menuline6 = "Boot Win98SE startup floppy:::win98se-startupdisk.nbi:::"; - option menuline7 = "Jumpstart install Solaris 8 (not working yet):::/dev/hda:::"; - option menuline8 = "Install Windows 98 SE (not working yet):::/dev/hda:::"; - option menuline9 = "Install Windows 2000 (not working yet):::/dev/hda:::"; - option menuline10 = "Install FreeBSD 4.3 (not working yet):::/dev/hda:::"; - option menuline11 = "Install OpenBSD 2.9 (not working yet):::/dev/hda:::"; - - # This is a hidden menu item, it should be password protected too - option menuline12 = "^[[3D^[[K^[[1A^M:::/dev/hda:::"; - -# We are using the menu, with different bootfiles. So we don't use this. -# If you weren't using a menu, you could use this override the global -# default "filename" setting. - -# filename "rh71-ks-etherboot"; - -# Use the following if etherboot compiled with -DREQUIRE_VCI_ETHERBOOT - - option vendor-encapsulated-options 3c:09:45:74:68:65:72:62:6f:6f:74:ff; - -} - -subnet 10.100.0.0 netmask 255.255.255.0 { - authoritative; - option routers 10.100.0.254; - option subnet-mask 255.255.255.0; - option domain-name "example.com"; - option domain-name-servers 10.100.0.254; - option time-offset -7; # US/Mountain - option ntp-servers 10.100.0.254; - range dynamic-bootp 10.100.0.175 10.100.0.250; - default-lease-time 21600; - max-lease-time 43200; - option netbios-name-servers 10.100.0.254; - option netbios-node-type 2; - use-host-decl-names on; - next-server server1.example.com; - -} - -host station1 { - hardware ethernet 00:01:03:de:57:e2; - fixed-address 10.100.0.1; -} -host station2 { - hardware ethernet 00:01:03:de:57:e7; - fixed-address 10.100.0.2; -} -host station3 { - hardware ethernet 00:01:03:de:57:b4; - fixed-address 10.100.0.3; -} -host station4 { - hardware ethernet 00:01:03:de:57:38; - fixed-address 10.100.0.4; -} -host station5 { - hardware ethernet 00:01:03:de:58:3d; - fixed-address 10.100.0.5; -} - -# -# Etc, etc -# - -############## End ISC DHCP v3 dhcpd.conf ############# diff --git a/gpxe/contrib/dhcpid/dhcpid.txt b/gpxe/contrib/dhcpid/dhcpid.txt deleted file mode 100644 index e6b5d277..00000000 --- a/gpxe/contrib/dhcpid/dhcpid.txt +++ /dev/null @@ -1,884 +0,0 @@ -From daniel@insu.com Thu Apr 27 14:14:55 2000 -Sender: root@iNsu.COM -Message-ID: <39075669.FAEB20F2@insu.com> -Date: Wed, 26 Apr 2000 16:49:45 -0400 -From: Daniel Shane <daniel@insu.com> -X-Mailer: Mozilla 4.72 [en] (X11; U; Linux 2.2.14-5.0 i686) -X-Accept-Language: en -MIME-Version: 1.0 -Subject: Re: New feature added to etherboot -References: <20000425170804.6677127D8A@Goffman.iNsu.COM> -Content-Type: multipart/mixed; - boundary="------------4734FDA0BF2F2FBDF8EB8DF6" - -This is a multi-part message in MIME format. ---------------4734FDA0BF2F2FBDF8EB8DF6 -Content-Type: text/plain; charset=us-ascii -Content-Transfer-Encoding: 7bit - -Ok, here is a diff for etherboot 4.6.0 that adds identifiers. - -To test this you need to use a class in the dhcpd.conf file and -also send back a string in option 208. - -These identifiers prevent a client from booting from other DHCP -servers when you have more than 1 in your network. - -In will also prevent any client, except the valid ones, to use this -DHCP server. - -Here is a subset of my dhcpd.conf : - -option iNdiskless-state code 208 = text; - -class "iNdiskless-boot" { - match if substring(option iNdiskless-state,0,4) = "BOOT"; -} -class "iNdiskless-setup" { - match if substring(option iNdiskless-state,0,5) = "SETUP"; -} - -subnet 10.4.1.0 netmask 255.255.255.0 { -pool { - allow members of "iNdiskless-boot"; - deny unknown clients; - range 10.4.1.2 10.4.1.200; - next-server 10.4.1.1; - -# Identify ourselves to the etherboot/DHCP client - option iNdiskless-state "BOOT"; - - host labo01 { - hardware ethernet 00:80:c8:ec:04:1b; - } - host labo02 { - hardware ethernet 00:4f:4c:04:45:d6; - } - host labo03 { - hardware ethernet 00:50:ba:c8:db:d6; - } -} -pool { - allow members of "iNdiskless-setup"; - range 10.4.1.201 10.4.1.254; - option iNdiskless-state "SETUP"; - -# send another kernel to setup the diskless workstation - } -} - -Daniel Shane. ---------------4734FDA0BF2F2FBDF8EB8DF6 -Content-Type: text/plain; charset=us-ascii; - name="main.c.diff" -Content-Transfer-Encoding: 7bit -Content-Disposition: inline; - filename="main.c.diff" - ---- etherboot-4.6.0/src/main.c Tue Apr 25 08:30:01 2000 -+++ etherboot-4.5.6-new/src/main.c Wed Apr 26 16:17:09 2000 -@@ -42,6 +42,23 @@ char *motd[RFC1533_VENDOR_NUMOFMOTD]; - #ifdef IMAGE_FREEBSD - int freebsd_howto = 0; - #endif -+ -+#ifdef SERVER_IDENT -+#ifdef DEFAULT_SERVER_IDENT -+char server_ident[9] = DEFAULT_SERVER_IDENT; -+#else -+char server_ident[9] = {}; -+#endif -+#endif -+ -+#ifdef CLIENT_IDENT -+#ifdef DEFAULT_CLIENT_IDENT -+char client_ident[9] = DEFAULT_CLIENT_IDENT; -+#else -+char client_ident[9] = {}; -+#endif -+#endif -+ - int vendorext_isvalid; - char config_buffer[TFTP_MAX_PACKET+1]; /* +1 for null byte */ - unsigned long netmask; -@@ -63,61 +80,85 @@ char rfc1533_cookie[5] = { RFC1533_CO - char rfc1533_cookie[] = { RFC1533_COOKIE}; - char rfc1533_end[]={RFC1533_END }; - static const char dhcpdiscover[]={ -- RFC2132_MSG_TYPE,1,DHCPDISCOVER, -- RFC2132_MAX_SIZE,2,2,64, -- RFC2132_PARAM_LIST,4,RFC1533_NETMASK,RFC1533_GATEWAY, -- RFC1533_HOSTNAME,RFC1533_EXTENSIONPATH -- }; --static const char dhcprequest []={ -- RFC2132_MSG_TYPE,1,DHCPREQUEST, -- RFC2132_SRV_ID,4,0,0,0,0, -- RFC2132_REQ_ADDR,4,0,0,0,0, -- RFC2132_MAX_SIZE,2,2,64, -- /* request parameters */ -- RFC2132_PARAM_LIST, --#ifdef IMAGE_FREEBSD -- /* 4 standard + 4 vendortags + 8 motd + 16 menu items */ -- 4 + 4 + 8 + 16, -+ RFC2132_MSG_TYPE,1,DHCPDISCOVER, -+ RFC2132_MAX_SIZE,2,2,64, -+#ifdef CLIENT_IDENT -+ RFC1533_VENDOR_CLIENT_IDENT,8,0,0,0,0,0,0,0,0, -+#endif -+ RFC2132_PARAM_LIST, -+#ifdef SERVER_IDENT -+ 5, - #else -- /* 4 standard + 3 vendortags + 8 motd + 16 menu items */ -- 4 + 3 + 8 + 16, -+ 4, - #endif -- /* Standard parameters */ -- RFC1533_NETMASK, RFC1533_GATEWAY, -- RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH, -- /* Etherboot vendortags */ -- RFC1533_VENDOR_MAGIC, -+#ifdef SERVER_IDENT -+ RFC1533_VENDOR_SERVER_IDENT, -+#endif -+ RFC1533_NETMASK, -+ RFC1533_GATEWAY, -+ RFC1533_HOSTNAME, -+ RFC1533_EXTENSIONPATH -+}; -+static const char dhcprequest []={ -+ RFC2132_MSG_TYPE,1,DHCPREQUEST, -+ RFC2132_SRV_ID,4,0,0,0,0, -+ RFC2132_REQ_ADDR,4,0,0,0,0, -+#ifdef CLIENT_IDENT -+ RFC1533_VENDOR_CLIENT_IDENT,8,0,0,0,0,0,0,0,0, -+#endif -+ RFC2132_MAX_SIZE,2,2,64, -+ /* request parameters */ -+ RFC2132_PARAM_LIST, -+ /* 4 standard + 3 vendortags + 8 motd + 16 menu items */ -+ 4 + -+ 3 + -+#ifdef IMAGE_FREEBSD -+ 1 + /* One more vendortags for VENDOR_HOWTO */ -+#endif -+#ifdef SERVER_IDENT -+ 1 + /* One more vendortags for VENDOR_SERVER_IDENT */ -+#endif -+ 8 + -+ 16, -+ /* Standard parameters */ -+ RFC1533_NETMASK, RFC1533_GATEWAY, -+ RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH, -+ /* Etherboot vendortags */ -+ RFC1533_VENDOR_MAGIC, - #ifdef IMAGE_FREEBSD -- RFC1533_VENDOR_HOWTO, -+ RFC1533_VENDOR_HOWTO, - #endif -- RFC1533_VENDOR_MNUOPTS, RFC1533_VENDOR_SELECTION, -- /* 8 MOTD entries */ -- RFC1533_VENDOR_MOTD, -- RFC1533_VENDOR_MOTD+1, -- RFC1533_VENDOR_MOTD+2, -- RFC1533_VENDOR_MOTD+3, -- RFC1533_VENDOR_MOTD+4, -- RFC1533_VENDOR_MOTD+5, -- RFC1533_VENDOR_MOTD+6, -- RFC1533_VENDOR_MOTD+7, -- /* 16 image entries */ -- RFC1533_VENDOR_IMG, -- RFC1533_VENDOR_IMG+1, -- RFC1533_VENDOR_IMG+2, -- RFC1533_VENDOR_IMG+3, -- RFC1533_VENDOR_IMG+4, -- RFC1533_VENDOR_IMG+5, -- RFC1533_VENDOR_IMG+6, -- RFC1533_VENDOR_IMG+7, -- RFC1533_VENDOR_IMG+8, -- RFC1533_VENDOR_IMG+9, -- RFC1533_VENDOR_IMG+10, -- RFC1533_VENDOR_IMG+11, -- RFC1533_VENDOR_IMG+12, -- RFC1533_VENDOR_IMG+13, -- RFC1533_VENDOR_IMG+14, -- RFC1533_VENDOR_IMG+15, -- }; -+#ifdef SERVER_IDENT -+ RFC1533_VENDOR_SERVER_IDENT, -+#endif -+ RFC1533_VENDOR_MNUOPTS, RFC1533_VENDOR_SELECTION, -+ /* 8 MOTD entries */ -+ RFC1533_VENDOR_MOTD, -+ RFC1533_VENDOR_MOTD+1, -+ RFC1533_VENDOR_MOTD+2, -+ RFC1533_VENDOR_MOTD+3, -+ RFC1533_VENDOR_MOTD+4, -+ RFC1533_VENDOR_MOTD+5, -+ RFC1533_VENDOR_MOTD+6, -+ RFC1533_VENDOR_MOTD+7, -+ /* 16 image entries */ -+ RFC1533_VENDOR_IMG, -+ RFC1533_VENDOR_IMG+1, -+ RFC1533_VENDOR_IMG+2, -+ RFC1533_VENDOR_IMG+3, -+ RFC1533_VENDOR_IMG+4, -+ RFC1533_VENDOR_IMG+5, -+ RFC1533_VENDOR_IMG+6, -+ RFC1533_VENDOR_IMG+7, -+ RFC1533_VENDOR_IMG+8, -+ RFC1533_VENDOR_IMG+9, -+ RFC1533_VENDOR_IMG+10, -+ RFC1533_VENDOR_IMG+11, -+ RFC1533_VENDOR_IMG+12, -+ RFC1533_VENDOR_IMG+13, -+ RFC1533_VENDOR_IMG+14, -+ RFC1533_VENDOR_IMG+15, -+}; - - #endif /* NO_DHCP_SUPPORT */ - static const char broadcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -@@ -176,6 +217,55 @@ done: - break; - } - #endif -+ -+#ifdef SHIFTED_IDENT_INPUT -+ if (getshift() & 3) -+ { -+#endif -+ -+#ifdef CLIENT_IDENT -+# ifdef ASK_CLIENT_IDENT -+ { -+ char tmp_ident[9] = {}; -+# ifdef DEFAULT_CLIENT_IDENT -+ printf("Enter the client identifier (8 char max.) default [%s] : ",client_ident); -+# else -+ printf("Enter the client identifier (8 char max.) : "); -+# endif -+ getstr(tmp_ident,8); -+ if (strlen(tmp_ident) != 0) -+ memcpy(client_ident,tmp_ident,8); -+ else -+ printf("%s",client_ident); -+ putchar('\n'); -+ } -+# endif -+#endif -+ -+#ifdef SERVER_IDENT -+# ifdef ASK_SERVER_IDENT -+ { -+ char tmp_ident[9] = {}; -+# ifdef DEFAULT_SERVER_IDENT -+ printf("Enter the server identifier (8 char max.) default [%s] : ",server_ident); -+# else -+ printf("Enter the server identifier (8 char max.) : "); -+# endif -+ getstr(tmp_ident,8); -+ if (strlen(tmp_ident) != 0) -+ memcpy(server_ident,tmp_ident,8); -+ else -+ printf("%s",server_ident); -+ putchar('\n'); -+ } -+# endif -+#endif -+ -+#ifdef SHIFTED_IDENT_INPUT -+ } -+#endif -+ -+ print_config(); - #if (TRY_FLOPPY_FIRST > 0) && defined(FLOPPY) - disk_init(); - printf("Trying floppy"); -@@ -188,7 +278,7 @@ done: - } - printf("no floppy\n"); - #endif /* TRY_FLOPPY_FIRST && FLOPPY */ -- print_config(); -+ print_config(); - gateA20_set(); - #ifdef EMERGENCYDISKBOOT - if (!eth_probe()) { -@@ -663,6 +753,8 @@ BOOTP - Get my IP address and load infor - int bootp() - { - int retry; -+ int offset = 0; -+ - #ifndef NO_DHCP_SUPPORT - int retry1; - #endif /* NO_DHCP_SUPPORT */ -@@ -680,11 +772,18 @@ int bootp() - bp.bp_xid = xid = starttime = currticks(); - memcpy(bp.bp_hwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - #ifdef NO_DHCP_SUPPORT -- memcpy(bp.bp_vend, rfc1533_cookie, 5); /* request RFC-style options */ -+ memcpy(bp.bp_vend+offset, rfc1533_cookie, 5); /* request RFC-style options */ -+ offset += sizeof rfc1533_cookie; - #else -- memcpy(bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); /* request RFC-style options */ -- memcpy(bp.bp_vend+sizeof rfc1533_cookie, dhcpdiscover, sizeof dhcpdiscover); -- memcpy(bp.bp_vend+sizeof rfc1533_cookie +sizeof dhcpdiscover, rfc1533_end, sizeof rfc1533_end); -+ memcpy(bp.bp_vend+offset, rfc1533_cookie, sizeof rfc1533_cookie); /* request RFC-style options */ -+ offset += sizeof rfc1533_cookie; -+ memcpy(bp.bp_vend+offset, dhcpdiscover, sizeof dhcpdiscover); -+ offset += sizeof dhcpdiscover; -+#ifdef CLIENT_IDENT -+ memcpy(bp.bp_vend+13, client_ident, strlen(client_ident)); -+#endif -+ memcpy(bp.bp_vend+offset, rfc1533_end, sizeof rfc1533_end); -+ offset += sizeof rfc1533_end; - #endif /* NO_DHCP_SUPPORT */ - - for (retry = 0; retry < MAX_BOOTP_RETRIES; ) { -@@ -715,19 +814,22 @@ int bootp() - #else - if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)){ - if (dhcp_reply==DHCPOFFER){ -- dhcp_reply=0; -- memcpy(bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); -- memcpy(bp.bp_vend+sizeof rfc1533_cookie, dhcprequest, sizeof dhcprequest); -- memcpy(bp.bp_vend+sizeof rfc1533_cookie +sizeof dhcprequest, rfc1533_end, sizeof rfc1533_end); -- memcpy(bp.bp_vend+9, &dhcp_server, sizeof(in_addr)); -- memcpy(bp.bp_vend+15, &dhcp_addr, sizeof(in_addr)); -- for (retry1 = 0; retry1 < MAX_BOOTP_RETRIES;) { -- udp_transmit(IP_BROADCAST, 0, BOOTP_SERVER, -- sizeof(struct bootp_t), &bp); - dhcp_reply=0; -- if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)) -- if (dhcp_reply==DHCPACK) -- return(1); -+ memcpy(bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); -+ memcpy(bp.bp_vend+sizeof rfc1533_cookie, dhcprequest, sizeof dhcprequest); -+ memcpy(bp.bp_vend+sizeof rfc1533_cookie +sizeof dhcprequest, rfc1533_end, sizeof rfc1533_end); -+ memcpy(bp.bp_vend+9, &dhcp_server, sizeof(in_addr)); -+ memcpy(bp.bp_vend+15, &dhcp_addr, sizeof(in_addr)); -+#ifdef CLIENT_IDENT -+ memcpy(bp.bp_vend+21, client_ident, strlen(client_ident)); -+#endif -+ for (retry1 = 0; retry1 < MAX_BOOTP_RETRIES;) { -+ udp_transmit(IP_BROADCAST, 0, BOOTP_SERVER, -+ sizeof(struct bootp_t), &bp); -+ dhcp_reply=0; -+ if (await_reply(AWAIT_BOOTP, 0, NULL, TIMEOUT)) -+ if (dhcp_reply==DHCPACK) -+ return(1); - rfc951_sleep(++retry1); - } - } else -@@ -750,6 +852,7 @@ AWAIT_REPLY - Wait until we get a respon - **************************************************************************/ - int await_reply(int type, int ival, void *ptr, int timeout) - { -+ int result; - unsigned long time; - struct iphdr *ip; - struct udphdr *udp; -@@ -757,6 +860,7 @@ int await_reply(int type, int ival, void - struct bootp_t *bootpreply; - struct rpc_t *rpc; - unsigned short ptype; -+ unsigned int min_packetlen; - - unsigned int protohdrlen = ETHER_HDR_SIZE + sizeof(struct iphdr) + - sizeof(struct udphdr); -@@ -766,35 +870,35 @@ int await_reply(int type, int ival, void - * needs a negligible amount of time. */ - for (;;) { - if (eth_poll()) { /* We have something! */ -- /* Check for ARP - No IP hdr */ -+ /* Check for ARP - No IP hdr */ - if (nic.packetlen >= ETHER_HDR_SIZE) { - ptype = ((unsigned short) nic.packet[12]) << 8 - | ((unsigned short) nic.packet[13]); - } else continue; /* what else could we do with it? */ - if ((nic.packetlen >= ETHER_HDR_SIZE + -- sizeof(struct arprequest)) && -- (ptype == ARP) ) { -+ sizeof(struct arprequest)) && -+ (ptype == ARP) ) { - unsigned long tmp; -- -+ - arpreply = (struct arprequest *) - &nic.packet[ETHER_HDR_SIZE]; - if ((arpreply->opcode == ntohs(ARP_REPLY)) && -- !memcmp(arpreply->sipaddr, ptr, sizeof(in_addr)) && -- (type == AWAIT_ARP)) { -+ !memcmp(arpreply->sipaddr, ptr, sizeof(in_addr)) && -+ (type == AWAIT_ARP)) { - memcpy(arptable[ival].node, arpreply->shwaddr, ETHER_ADDR_SIZE); - return(1); - } - memcpy(&tmp, arpreply->tipaddr, sizeof(in_addr)); - if ((arpreply->opcode == ntohs(ARP_REQUEST)) && -- (tmp == arptable[ARP_CLIENT].ipaddr.s_addr)) { -+ (tmp == arptable[ARP_CLIENT].ipaddr.s_addr)) { - arpreply->opcode = htons(ARP_REPLY); - memcpy(arpreply->tipaddr, arpreply->sipaddr, sizeof(in_addr)); - memcpy(arpreply->thwaddr, arpreply->shwaddr, ETHER_ADDR_SIZE); - memcpy(arpreply->sipaddr, &arptable[ARP_CLIENT].ipaddr, sizeof(in_addr)); - memcpy(arpreply->shwaddr, arptable[ARP_CLIENT].node, ETHER_ADDR_SIZE); - eth_transmit(arpreply->thwaddr, ARP, -- sizeof(struct arprequest), -- arpreply); -+ sizeof(struct arprequest), -+ arpreply); - #ifdef MDEBUG - memcpy(&tmp, arpreply->tipaddr, sizeof(in_addr)); - printf("Sent ARP reply to: %I\n",tmp); -@@ -802,20 +906,20 @@ int await_reply(int type, int ival, void - } - continue; - } -- -+ - if (type == AWAIT_QDRAIN) { - continue; - } -- -- /* Check for RARP - No IP hdr */ -+ -+ /* Check for RARP - No IP hdr */ - if ((type == AWAIT_RARP) && -- (nic.packetlen >= ETHER_HDR_SIZE + -- sizeof(struct arprequest)) && -- (ptype == RARP)) { -+ (nic.packetlen >= ETHER_HDR_SIZE + -+ sizeof(struct arprequest)) && -+ (ptype == RARP)) { - arpreply = (struct arprequest *) - &nic.packet[ETHER_HDR_SIZE]; - if ((arpreply->opcode == ntohs(RARP_REPLY)) && -- !memcmp(arpreply->thwaddr, ptr, ETHER_ADDR_SIZE)) { -+ !memcmp(arpreply->thwaddr, ptr, ETHER_ADDR_SIZE)) { - memcpy(arptable[ARP_SERVER].node, arpreply->shwaddr, ETHER_ADDR_SIZE); - memcpy(& arptable[ARP_SERVER].ipaddr, arpreply->sipaddr, sizeof(in_addr)); - memcpy(& arptable[ARP_CLIENT].ipaddr, arpreply->tipaddr, sizeof(in_addr)); -@@ -823,64 +927,72 @@ int await_reply(int type, int ival, void - } - continue; - } -- -- /* Anything else has IP header */ -+ -+ /* Anything else has IP header */ - if ((nic.packetlen < protohdrlen) || -- (ptype != IP) ) continue; -+ (ptype != IP) ) continue; - ip = (struct iphdr *)&nic.packet[ETHER_HDR_SIZE]; - if ((ip->verhdrlen != 0x45) || -- ipchksum((unsigned short *)ip, sizeof(struct iphdr)) || -- (ip->protocol != IP_UDP)) continue; -+ ipchksum((unsigned short *)ip, sizeof(struct iphdr)) || -+ (ip->protocol != IP_UDP)) continue; - udp = (struct udphdr *)&nic.packet[ETHER_HDR_SIZE + -- sizeof(struct iphdr)]; -- -- /* BOOTP ? */ -+ sizeof(struct iphdr)]; -+ -+ /* BOOTP ? */ - bootpreply = (struct bootp_t *)&nic.packet[ETHER_HDR_SIZE]; -- if ((type == AWAIT_BOOTP) && -- (nic.packetlen >= (ETHER_HDR_SIZE + --#ifdef NO_DHCP_SUPPORT -- sizeof(struct bootp_t))) && -+#ifdef NO_DHCP_SUPPORT -+ min_packetlen = ETHER_HDR_SIZE + sizeof(struct bootp_t); - #else -- sizeof(struct bootp_t))-DHCP_OPT_LEN) && --#endif /* NO_DHCP_SUPPORT */ -- (ntohs(udp->dest) == BOOTP_CLIENT) && -- (bootpreply->bp_op == BOOTP_REPLY) && -- (bootpreply->bp_xid == xid)) { -- arptable[ARP_CLIENT].ipaddr.s_addr = -- bootpreply->bp_yiaddr.s_addr; -+ min_packetlen = ETHER_HDR_SIZE + sizeof(struct bootp_t) - DHCP_OPT_LEN; -+#endif -+ if ( -+ (type == AWAIT_BOOTP) && -+ (nic.packetlen >= min_packetlen) && -+ (ntohs(udp->dest) == BOOTP_CLIENT) && -+ (bootpreply->bp_op == BOOTP_REPLY) && -+ (bootpreply->bp_xid == xid) -+ ) { -+ arptable[ARP_CLIENT].ipaddr.s_addr = bootpreply->bp_yiaddr.s_addr; - #ifndef NO_DHCP_SUPPORT - dhcp_addr.s_addr = bootpreply->bp_yiaddr.s_addr; - #endif /* NO_DHCP_SUPPORT */ - netmask = default_netmask(); -- arptable[ARP_SERVER].ipaddr.s_addr = -- bootpreply->bp_siaddr.s_addr; -+ arptable[ARP_SERVER].ipaddr.s_addr = bootpreply->bp_siaddr.s_addr; - memset(arptable[ARP_SERVER].node, 0, ETHER_ADDR_SIZE); /* Kill arp */ -- arptable[ARP_GATEWAY].ipaddr.s_addr = -- bootpreply->bp_giaddr.s_addr; -+ arptable[ARP_GATEWAY].ipaddr.s_addr = bootpreply->bp_giaddr.s_addr; - memset(arptable[ARP_GATEWAY].node, 0, ETHER_ADDR_SIZE); /* Kill arp */ - if (bootpreply->bp_file[0]) { - memcpy(kernel_buf, bootpreply->bp_file, 128); - kernel = kernel_buf; - } - memcpy((char *)BOOTP_DATA_ADDR, (char *)bootpreply, sizeof(struct bootpd_t)); -- decode_rfc1533(BOOTP_DATA_ADDR->bootp_reply.bp_vend, --#ifdef NO_DHCP_SUPPORT -- 0, BOOTP_VENDOR_LEN + -- MAX_BOOTP_EXTLEN, 1); --#else -- 0, DHCP_OPT_LEN, 1); --#endif /* NO_DHCP_SUPPORT */ -- return(1); -+#ifdef NO_DHCP_SUPPORT -+ if (decode_rfc1533(BOOTP_DATA_ADDR->bootp_reply.bp_vend, -+ 0, BOOTP_VENDOR_LEN + -+ MAX_BOOTP_EXTLEN, 1)) { -+ return(1); -+ } -+ else { -+ continue; -+ } -+#else -+ if (decode_rfc1533(BOOTP_DATA_ADDR->bootp_reply.bp_vend, -+ 0, DHCP_OPT_LEN, 1)) { -+ return(1); -+ } -+ else { -+ continue; -+ } - } -- -+#endif /* NO_DHCP_SUPPORT */ - #ifdef DOWNLOAD_PROTO_TFTP -- /* TFTP ? */ -+ /* TFTP ? */ - if ((type == AWAIT_TFTP) && -- (ntohs(udp->dest) == ival)) return(1); -+ (ntohs(udp->dest) == ival)) return(1); - #endif /* DOWNLOAD_PROTO_TFTP */ -- -+ - #ifdef DOWNLOAD_PROTO_NFS -- /* RPC ? */ -+ /* RPC ? */ - rpc = (struct rpc_t *)&nic.packet[ETHER_HDR_SIZE]; - if ((type == AWAIT_RPC) && - (ntohs(udp->dest) == ival) && -@@ -889,19 +1001,19 @@ int await_reply(int type, int ival, void - return (1); - } - #endif /* DOWNLOAD_PROTO_NFS */ -- -+ - } else { -- /* Check for abort key only if the Rx queue is empty - -- * as long as we have something to process, don't -- * assume that something failed. It is unlikely that -- * we have no processing time left between packets. */ -+ /* Check for abort key only if the Rx queue is empty - -+ * as long as we have something to process, don't -+ * assume that something failed. It is unlikely that -+ * we have no processing time left between packets. */ - if (iskey() && (getchar() == ESC)) - #ifdef EMERGENCYDISKBOOT - exit(0); - #else -- longjmp(jmp_bootmenu,1); -+ longjmp(jmp_bootmenu,1); - #endif -- /* Do the timeout after at least a full queue walk. */ -+ /* Do the timeout after at least a full queue walk. */ - if ((timeout == 0) || (currticks() > time)) { - break; - } -@@ -914,13 +1026,15 @@ int await_reply(int type, int ival, void - DECODE_RFC1533 - Decodes RFC1533 header - **************************************************************************/ - int decode_rfc1533(p, block, len, eof) -- register unsigned char *p; -- int block, len, eof; -+ register unsigned char *p; -+ int block, len, eof; - { - static unsigned char *extdata = NULL, *extend = NULL; - unsigned char *extpath = NULL; - unsigned char *endp; -- -+#ifdef SERVER_IDENT -+ char rcvd_server_ident[9] = {}; -+#endif - if (block == 0) { - #ifdef IMAGE_MENU - memset(imagelist, 0, sizeof(imagelist)); -@@ -1002,11 +1116,16 @@ int decode_rfc1533(p, block, len, eof) - } - #endif - #ifdef MOTD -- else if (c >= RFC1533_VENDOR_MOTD && -+ else if (c >= RFC1533_VENDOR_MOTD && - c < RFC1533_VENDOR_MOTD + - RFC1533_VENDOR_NUMOFMOTD) - motd[c - RFC1533_VENDOR_MOTD] = p; - #endif -+#ifdef SERVER_IDENT -+ else if (c == RFC1533_VENDOR_SERVER_IDENT) { -+ memcpy(rcvd_server_ident,p+2,TAG_LEN(p)); -+ } -+#endif - else { - #if 0 - unsigned char *q; -@@ -1018,6 +1137,30 @@ int decode_rfc1533(p, block, len, eof) - } - p += TAG_LEN(p) + 2; - } -+#if defined(SERVER_IDENT) && defined(DBG_IDENT) -+ if (strcasecmp(rcvd_server_ident,server_ident)) { -+ char ip[16]; -+ -+ inet_ntoa(dhcp_server,ip); -+ printf("[%s]: Option %d (%s), invalid response. Wanted (%s).\n", -+ ip, -+ RFC1533_VENDOR_SERVER_IDENT, -+ rcvd_server_ident, -+ server_ident); -+ strcpy(rcvd_server_ident,""); -+ return(0); -+ } -+ else { -+ char ip[16]; -+ -+ inet_ntoa(dhcp_server,ip); -+ printf("[%s]: Option %d (%s), valid response.\n", -+ ip, -+ RFC1533_VENDOR_SERVER_IDENT, -+ rcvd_server_ident); -+ strcpy(rcvd_server_ident,""); -+ } -+#endif - extdata = extend = endp; - if (block == 0 && extpath != NULL) { - char fname[64]; -@@ -1103,3 +1246,4 @@ void cleanup(void) - * c-basic-offset: 8 - * End: - */ -+ - ---------------4734FDA0BF2F2FBDF8EB8DF6 -Content-Type: text/plain; charset=us-ascii; - name="misc.c.diff" -Content-Transfer-Encoding: 7bit -Content-Disposition: inline; - filename="misc.c.diff" - ---- etherboot-4.6.0/src/misc.c Tue Apr 25 08:30:25 2000 -+++ etherboot-4.5.6-new/src/misc.c Wed Apr 26 16:26:38 2000 -@@ -140,9 +140,11 @@ void printf(const char *fmt, ...) - - #ifdef IMAGE_MENU - /************************************************************************** --INET_ATON - Convert an ascii x.x.x.x to binary form -+INET_NTOA - Convert an ascii x.x.x.x to binary form - **************************************************************************/ --int inet_aton(char *p, in_addr *i) -+int inet_aton(p, i) -+ char *p; -+ in_addr *i; - { - unsigned long ip = 0; - int val; -@@ -165,7 +167,19 @@ int inet_aton(char *p, in_addr *i) - - #endif /* IMAGE_MENU */ - --int getdec(char **ptr) -+#if defined(CLIENT_IDENT) || defined (SERVER_IDENT) -+/************************************************************************** -+INET_NTOA - Convert a binary form to an ascii x.x.x.x form -+**************************************************************************/ -+char *inet_ntoa(in_addr i, char *p) -+{ -+ sprintf(p,"%d.%d.%d.%d",i.s_addr>>24,i.s_addr<<8>>24,i.s_addr<<16>>24,i.s_addr<<24>>24); -+ return p; -+} -+#endif -+ -+int getdec(ptr) -+ char **ptr; - { - char *p = *ptr; - int ret=0; -@@ -308,6 +322,45 @@ iskey(void) - return 0; - } - #endif /* ETHERBOOT32 */ -+ -+/************************************************************************** -+GETSTR - Read a string of size bytes from the keyboard -+(without echoing the final return) -+**************************************************************************/ -+void getstr(char *s, int size) -+{ -+ int i=0; -+ char c; -+ -+ while(1) { -+ c = getc(); -+ -+ -+ if (c == 13) -+ { -+ s[i]='\0'; -+ break; -+ } -+ else if ( -+ ((c >= 'a') && (c <='z')) || -+ ((c >= 'A') && (c <='Z')) || -+ ((c >= '0') && (c <='9')) -+ ) { -+ if (i==8) { -+ putchar(8); -+ putchar(s[i-1]=c); -+ } -+ else -+ putchar(s[i++]=c); -+ } -+ else if ( c == 8 ) { -+ if (i != 0) { -+ --i; -+ s[i]='\0'; -+ putchar(8); -+ putchar(32); -+ putchar(8); -+ } -+ } -+ } -+} - - /* - * Local variables: - ---------------4734FDA0BF2F2FBDF8EB8DF6 -Content-Type: text/plain; charset=us-ascii; - name="Config.diff" -Content-Transfer-Encoding: 7bit -Content-Disposition: inline; - filename="Config.diff" - ---- etherboot-4.6.0/src/Config Tue Apr 25 08:30:57 2000 -+++ etherboot-4.5.6-new/src/Config Wed Apr 26 15:55:57 2000 -@@ -59,6 +59,27 @@ - # may no longer be appropriate. You might need to set - # MAX_ARP_RETRIES, MAX_BOOTP_RETRIES, MAX_TFTP_RETRIES - # and MAX_RPC_RETRIES to a larger value. -+# -DDEFAULT_CLIENT_IDENT -+# The default client identifier that is sent to the -+# DHCP server to identify itself. -+# -DDEFAULT_SERVER_IDENT -+# The expected response that the client will wait -+# for when a DHCP server responds to the the initial -+# client discovery. -+# -DASK_CLIENT_IDENT -+# -DASK_SERVER_IDENT -+# If these are set, the boot process will include -+# a question period where you can manualy specify -+# the client and/or server identifiers. -+# -DSHIFTED_IDENT_INPUT -+# If this is set then the boot process will only -+# ask for the identifiers if one of the shift keys -+# is pressed. Else it will send the default identifiers -+# automatically -+# -DDBG_IDENT -+# This will give show all the DHCP responses with -+# their identifiers. -+# - # - # Etherboot/32 only options: - # -DAOUT_IMAGE - Add a.out kernel boot support (generic) -@@ -147,6 +168,14 @@ CFLAGS32+= -DASK_BOOT=3 -DANS_DEFAULT=AN - - # Change download protocol to NFS. Only available for Etherboot/32 for now. - # CFLAGS32+= -DDOWNLOAD_PROTO_NFS -+ -+# If you have more than one DHCP server you might want to -+# enable these to be able to sort out which one you want to -+# respond to. -+CFLAGS32+= -DDEFAULT_CLIENT_IDENT=\"BOOT\" -DDEFAULT_SERVER_IDENT=\"BOOT\" -+CFLAGS32+= -DASK_CLIENT_IDENT -DASK_SERVER_IDENT -+CFLAGS32+= -DSHIFTED_IDENT_INPUT -+CFLAGS32+= -DDBG_IDENT - - # These flags affect the loader that is prepended to the Etherboot image - LCONFIG+= -DMOVEROM - ---------------4734FDA0BF2F2FBDF8EB8DF6 -Content-Type: text/plain; charset=us-ascii; - name="etherboot.h.diff" -Content-Transfer-Encoding: 7bit -Content-Disposition: inline; - filename="etherboot.h.diff" - ---- etherboot-4.6.0/src/etherboot.h Tue Apr 25 08:30:55 2000 -+++ etherboot-4.5.6-new/src/etherboot.h Wed Apr 26 16:07:16 2000 -@@ -8,6 +8,14 @@ Author: Martin Renters - - #include "osdep.h" - -+#if (! defined(NO_DHCP_SUPPORT)) && (defined(ASK_CLIENT_IDENT) || defined(DEFAULT_CLIENT_IDENT)) -+# define CLIENT_IDENT -+#endif -+ -+#if (! defined(NO_DHCP_SUPPORT)) && (defined(ASK_SERVER_IDENT) || defined(DEFAULT_SERVER_IDENT)) -+# define SERVER_IDENT -+#endif -+ - /* These could be customised for different languages perhaps */ - #define ASK_PROMPT "Boot from (N)etwork or from (L)ocal? " - #define ANS_NETWORK 'N' -@@ -224,6 +232,12 @@ Author: Martin Renters - #ifdef IMAGE_FREEBSD - #define RFC1533_VENDOR_HOWTO 132 - #endif -+#ifdef CLIENT_IDENT -+#define RFC1533_VENDOR_CLIENT_IDENT 208 -+#endif -+#ifdef SERVER_IDENT -+#define RFC1533_VENDOR_SERVER_IDENT 208 -+#endif - #define RFC1533_VENDOR_MNUOPTS 160 - #define RFC1533_VENDOR_SELECTION 176 - #define RFC1533_VENDOR_MOTD 184 -@@ -477,11 +491,13 @@ extern int getdec P((char **)); - extern void printf P((const char *, ...)); - extern char *sprintf P((char *, const char *, ...)); - extern int inet_aton P((char *p, in_addr *i)); -+extern char *inet_ntoa P((in_addr i, char *p)); - extern void gateA20_set P((void)); - extern void gateA20_unset P((void)); - extern void putchar P((int)); - extern int getchar P((void)); - extern int iskey P((void)); -+extern void getstr P((char *s, int size)); - - /* start*.S */ - extern int getc P((void)); -@@ -528,8 +544,10 @@ extern int hostnamelen; - extern unsigned long netmask; - extern int jmp_bootmenu[10]; - extern struct arptable_t arptable[MAX_ARP]; --#ifdef IMAGE_MENU -+#ifdef MOTD - extern char *motd[RFC1533_VENDOR_NUMOFMOTD]; -+#endif -+#ifdef IMAGE_MENU - extern int menutmo,menudefault; - extern unsigned char *defparams; - extern int defparams_max; - ---------------4734FDA0BF2F2FBDF8EB8DF6-- - diff --git a/gpxe/contrib/eepro100notes/flash-1.txt b/gpxe/contrib/eepro100notes/flash-1.txt deleted file mode 100644 index 61579b4c..00000000 --- a/gpxe/contrib/eepro100notes/flash-1.txt +++ /dev/null @@ -1,73 +0,0 @@ -Date: Tue, 18 May 1999 15:45:55 +0200 (MEST) -From: Erik Starback <erik@math.uu.se> -To: netboot@baghira.han.de -Subject: Netboot with Intel EEPRO100+ Management -Message-ID: <Pine.LNX.3.96.990518154313.3875A-100000@anarchy.math.uu.se> -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=iso-8859-1 -Content-Transfer-Encoding: 8BIT -Sender: owner-netboot@baghira.han.de -Precedence: bulk -Reply-To: netboot@baghira.han.de -X-Moderator: netboot-owner@baghira.han.de -X-UIDL: 6ca8453c19c46d622813e9be8ada9517 -Status: O -X-Status: - -Hello! - -When Intel eepro100+ NIC disappeared from the market, I didn't know -what to do. I didn't find any information if anyone has used the -new eepro100+ Management Adapter to netboot linux. - -I thought that the card should netboot with the same configuration as -the old card when I read Donald Beckers comment: -> The driver should "just work" with the '559. It's not supposed to be -> substantially different than the '558. (I don't have a datasheet -> or sample card to confirm this statement.) - -The problem was now only to put the netboot-program to the built in -flash memory on the NIC. With the old card I used a flash memory (Intel -N28F020 [N28010 didn't work])) and the program FUTIL.EXE from Intel to -flash it. FUTIL did't recognize the memory on the management card -and did not work therefore. - -I found the intel program FBOOT.EXE that was made to upgrade the built -in Intel BOOT agent. I did: Boot dos from floppy, Run FBOOT (choose -adapter), choose (u)pdate, choose Create restore image, rename the -backup file (in my case 2743BE52.FLS [the eight last hex digits from -the MAC address]), rename your netboot code (in my case netboot 0.8.1) -to the backup files original name (in my case 2743BE52.FLS), run -FBOOT, choose (r)estore. - -Voila! - -A shorter way (if you don't need the backup of the old Intel BOOT -agent code) is of course: rename netboot file to [the eight last hex -digits from the MAC address].FLS, run FBOOT, choose restore. - -Caution: I think it is possible to make a NIC unusable if you have -made the netboot (or etherboot) file with "wrong" parameters. A couple -of month ago I did a etherboot boot file and put it on an old -EEPRO100+ card. It worked fine, but it was impossible to boot local -with it. So I could not boot dos and with FUTIL or FBOOT erase the -flash memory! To erase the chip I had to take out the memory chip, -boot dos and then put in the memory chip. This isn't possible when the -memory chip is build in. - -Links: -<http://support.intel.com/support/landesk/configmgr/LSA1_193.HTM> -FUTIL.EXE is a part of LSA1_193.ZIP - -<http://support.intel.com/support/etherexpress/pro100/100pboot.htm> -FBOOT.EXE is a part of 100pboot.exe - -/Erik S - -------------------------------------------------------------------------- -Erik Starbäck, System administrator E-mail address: erik@math.uu.se -Uppsala University Telephone (o): +46 18 4713277 -Department of Mathematics Cellular phone: +46 70 4250260 -P. O. Box 480 Fax (o): +46 18 4713201 -SE-751 06 UPPSALA -Sweden diff --git a/gpxe/contrib/eepro100notes/flash-2.txt b/gpxe/contrib/eepro100notes/flash-2.txt deleted file mode 100644 index 1128c30e..00000000 --- a/gpxe/contrib/eepro100notes/flash-2.txt +++ /dev/null @@ -1,149 +0,0 @@ -Subject: Look Mom, no PROM burner! (eepro100b flashing instructions) :-) -Date: Sun, 23 Jan 2000 01:53:08 -0500 -x-sender: mdc%thinguin.org@cdi.entity.com -x-mailer: Claris Emailer 2.0v3, January 22, 1998 -From: Marty Connor <mdc@thinguin.org> -To: "Netboot List" <netboot@baghira.han.de> -Mime-Version: 1.0 -Content-Type: text/plain; charset="US-ASCII" -Message-ID: <1263512144-341319205@entity.com> - -Continuing the Etherboot World Domination theme, I noticed that there was -a PCI ethernet card on my bookshelf that still contained the original -vendor's code in its flash memory. The card virtually cried out to be -flashed with Etherboot 4.4.1. :-) - -After having figured out how to flash the 3C905C last week, and owing to -the fact that the temperature here in Cambridge, Massachusetts (USA) has -dropped well below freezing, I decided to explore the possibility of -flashing the Intel eepro100b that was sitting on my bookcase. - -After determining that it was unlikely that one could flash the chip in -user mode under linux like the 3C509C, I turned to other options. (the -reason is that the flash is memory mapped to a place that causes a core -dump if accessed. i suppose one could to patch the kernel to flash the -card, or add a linux device driver, but... :-) - -By the way, If you are ever looking for Linux utilities for Ethernet -cards, you may want to check out: - - http://cesdis.gsfc.nasa.gov/linux/diag/ - -which is a treasure trove of tools for manipulating and testing Ethernet -cards, all with source, courtesy of Donald Becker. - -At this point, I felt it was time to make a virtual trip to the Intel -site (http://www.intel.com/), and search for utilities that might work -with the eepro100B. I found two candidates: FUTIL and FBOOT. I -downloaded, decompressed, and transferred them to a DOS formatted floppy. -Next I determined (after a few tries) that F8 will let me get to DOS -instead of booting windows. (I tend to avoid Windows when I can). - -I first tried FUTIL.EXE. No good. It told me it didn't recognize the -flash on my eepro100B. how unfortunate. and I had such hopes :-) - -Next I tested FBOOT.EXE (available at -http://support.intel.com/support/network/adapter/pro100/100PBOOT.htm) -This program did in fact recognize my eepro100b card. - -The thing about FBOOT however, is that it thinks it only can load certain -files. I of course needed to load an Etherboot image. It appeared to -have no option for doing that. Things looked grim. - -Then I noticed that FBOOT was kind enough to do the following dialog: - - Select Option (U)pdate or (R)estore: U - -I chose Update and it then offered to back up my flash rom for later -restore: - - Create Restore Image (Y)es or (N)o: Y - -I chose "Y" and it proceeded to write a file of my flash memory, which -contained the Intel code. - - Writing FLASH image to file... 100% - -It then erased the device: - - Erasing FLASH Device... 100% - -and then programmed it with fresh code (stored inside the program, no -doubt): - - Programming FLASH Device... 100% - -So now I had a backup of the Intel boot code in a file strangely called: - - 2794FC60.FLS - -Hmmmm, interesting name. The MAC address of the card is 09902794FC60. -They just name the file with the last 4 octets of the MAC address and -.FLS. The file is exactly 65536 bytes, which would make sense for a 64K -Flash Memory device. - -Then I got to thinking, I wonder how carefully the "restore" part of -FBOOT looks at what it is loading? What if I took an Etherboot .rom -file, padded it with 48K of 0xFFs and named it 2794FC60.FLS. What if I -then told FBOOT.EXE to "restore" that? - -Well, I guess by now, you know it worked :-) - -The card came up with the delightful Etherboot banner, Did DHCP, tftp, -and started a kernel. - -The only unfortunate part is that you need to do this under DOS because -you seem to need to be in real mode to program the card. Oh well, -sacrifices have to be made :-) - -So, in summary, to prepare Etherboot image for flashing into the Intel -EEPRO100B card with FBOOT, you need to first make an eepro100.rom file, -as usual. - -Then, see how large it is, with an "ls -l eepro100.rom". the answer will -probably be 16,384. You need to pad it with hex FFs to make it 64K for -FBOOT. I used the following two lines to create the flash image file. - - $ perl -e 'print "\xFF" x 49152' > 48kpad.bin - $ cat eepro100.rom 48kpad.bin > 2794FC60.FLS - -Next write it to a DOS Floppy: - - $ mount -t msdos /dev/fd0 /mnt/floppy - $ cp 2794FC60.FLS /mnt/floppy - $ umount /mnt/floppy - -Now you need to get to DOS. You could actually use a bootable DOS floppy -with FBOOT.EXE and 2794FC60.FLS on it. I started a Windows box and hit -F8 right before Windows started, and chose option 5, "Command Prompt -Only", which gives you DOS. This program can't run in a DOS window under -Windows or anything like that. You need to be in real DOS. - -Next it's time to run FBOOT. It will detect your ethernet card(s), ask -you which one you want to program, and let you choose it from a menu. - -now the fun part: - - Select Option (U)pdate or (R)estore: R - Erasing FLASH Device... 100% - Writing FLASH image from file... 100% - -Time to reboot and let Etherboot take over. - -So there you go, a way to make Intel EEPRO100Bs play nicely with -Etherboot. Maybe we should put these instructions in the Etherboot -contrib directory so people who have eepro100b cards will be able to -avoid 3C905C envy :-) - -I hope this helps a few people out. - -Regards, - -Marty - ---- - Name: Martin D. Connor -US Mail: Entity Cyber, Inc.; P.O. Box 391827; Cambridge, MA 02139; USA - Voice: (617) 491-6935, Fax: (617) 491-7046 - Email: mdc@thinguin.org - Web: http://www.thinguin.org/ diff --git a/gpxe/contrib/eepro100notes/flash-3.txt b/gpxe/contrib/eepro100notes/flash-3.txt deleted file mode 100644 index 1a865a44..00000000 --- a/gpxe/contrib/eepro100notes/flash-3.txt +++ /dev/null @@ -1,57 +0,0 @@ -Date: Sun, 23 Jan 2000 09:47:15 +0100 (MET) -From: Erik Starbäck <erik@math.uu.se> -To: Netboot List <netboot@baghira.han.de> -Subject: Re: Look Mom, no PROM burner! (eepro100b flashing instructions) :-) -In-Reply-To: <1263512144-341319205@entity.com> -Message-ID: <Pine.LNX.3.96.1000123094505.28562A-100000@anarchy.math.uu.se> -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=iso-8859-1 -Content-Transfer-Encoding: 8BIT -Sender: owner-netboot@baghira.han.de -Precedence: bulk -Reply-To: netboot@baghira.han.de -X-Moderator: netboot-owner@baghira.han.de - - -Hello! - -In <http://www.han.de/~gero/netboot/archive/msg01718.html> I wrote what I -did know about futil and fboot then. It is about the same as Martys -instructions, but I have a few comments now. - -> Then, see how large it is, with an "ls -l eepro100.rom". the answer will -> probably be 16,384. You need to pad it with hex FFs to make it 64K for -> FBOOT. I used the following two lines to create the flash image file. - -> $ perl -e 'print "\xFF" x 49152' > 48kpad.bin -> $ cat eepro100.rom 48kpad.bin > 2794FC60.FLS - -It worked for me without any padding. When I burned a smaller image -the program printed 50% instead of 100% and then it -stopped. Everything worked anyway. - - -I also did a brutal way of install etherboot or netboot on a -EEPRO100+Mng without creating a file of type "2794FC60.FLS" for -every card. It was necessary for me when I installed 70 clients... - -I chopped the binary file fboot.exe (my version was 99811 bytes, I -don't remember the version name) in three parts: - -fboot1 30096 bytes -fboot2 65536 bytes -fboot3 4179 bytes - -Then you cat put them together again, but with a different part 2 and -save it as fbootown.exe and execute it. It worked for me anyway. Of -course you have to use padding to get a 64k part instead of fboot2. - -/Erik S - -------------------------------------------------------------------------- -Erik Starbäck, System administrator E-mail address: erik@math.uu.se -Uppsala University Telephone (o): +46 18 4713277 -Department of Mathematics Cellular phone: +46 70 4250260 -P. O. Box 480 Fax (o): +46 18 4713201 -SE-751 06 UPPSALA -Sweden diff --git a/gpxe/contrib/errcode/README b/gpxe/contrib/errcode/README deleted file mode 100644 index b2963c06..00000000 --- a/gpxe/contrib/errcode/README +++ /dev/null @@ -1,35 +0,0 @@ -Error Code Lookup for gPXE -========================== -This program looks up gPXE error codes so you can locate the line of source -code which produced the error. - -Setup ------ -You must run: -./build_errcodedb.py >errcodedb.py - -This extracts error code definitions from the gPXE source code and produces a -"database" which is used by the main program. - -Once you have done this errcode.py and errcodedb.py are the only files you -need. They are now independent of the gPXE source code and can be moved -anywhere. - -[OPTIONAL] -A PHP script is provided as a web interface. First edit errcode.php to point -$ERRCODE_PATH to the errcode.py script. Then move errcode.php to a location -visible from your web server. - -[OPTIONAL] -A simple IRC bot is provided. Edit gpxebot.py to fill in the IRC details. - -Usage ------ -Looking up error codes on the command-line: -./errcode.py 0x12345678 - -Further information -------------------- -See http://etherboot.org/. - -Released under the GPL and written by Stefan Hajnoczi <stefanha@gmail.com>. diff --git a/gpxe/contrib/errcode/build_errcodedb.py b/gpxe/contrib/errcode/build_errcodedb.py deleted file mode 100644 index 1be9d853..00000000 --- a/gpxe/contrib/errcode/build_errcodedb.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -import sys -import re - -pxenv_status_files = ('../../src/include/errno.h', ) -errfile_files = ('../../src/include/gpxe/errfile.h', - '../../src/arch/i386/include/bits/errfile.h') -posix_errno_files = ('../../src/include/errno.h', ) - -PXENV_STATUS_RE = re.compile(r'^#define\s+(PXENV_STATUS_[^\s]+)\s+(.+)$', re.M) -ERRFILE_RE = re.compile(r'^#define\s+(ERRFILE_[^\s]+)\s+(.+)$', re.M) -POSIX_ERRNO_RE = re.compile(r'^#define\s+(E[A-Z0-9]+)\s+(?:\\\n)?.*(0x[0-9a-f]+).*$', re.M) - -def err(msg): - sys.stderr.write('%s: %s\n' % (sys.argv[0], msg)) - sys.exit(1) - -def to_pxenv_status(errno): - return errno & 0xff - -def to_errfile(errno): - return (errno >> 13) & 0x7ff - -def to_posix_errno(errno): - return (errno >> 24) & 0x7f - -def load_header_file(filename, regexp): - defines = {} - data = open(filename, 'r').read() - for m in regexp.finditer(data): - key, val = m.groups() - defines[key] = val - return defines - -def evaluate(defines, expr): - pyexpr = '' - for token in expr.split(): - if token in '()': - pass - elif token.startswith('/*') or token.startswith('//'): - break - elif token.startswith('0x') or token == '|': - pyexpr += token - else: - if token in defines: - pyexpr += '0x%x' % defines[token] - else: - return -1 - if not re.match(r'^[0-9a-zA-Z_|]+$', pyexpr): - err('invalid expression') - return eval(pyexpr) - -def build(filenames, regexp, selector): - unevaluated = {} - for filename in filenames: - unevaluated.update(load_header_file(filename, regexp)) - - evaluated = {} - changed = True - while changed: - changed = False - for key in list(unevaluated.keys()): - val = evaluate(evaluated, unevaluated[key]) - if val != -1: - del unevaluated[key] - evaluated[key] = val - changed = True - if unevaluated: - err('unable to evaluate all #defines') - - lookup = {} - for key, val in evaluated.iteritems(): - lookup[selector(val)] = key - return lookup - -print 'pxenv_status =', repr(build(pxenv_status_files, PXENV_STATUS_RE, to_pxenv_status)) -print 'errfile =', repr(build(errfile_files, ERRFILE_RE, to_errfile)) -print 'posix_errno =', repr(build(posix_errno_files, POSIX_ERRNO_RE, to_posix_errno)) diff --git a/gpxe/contrib/errcode/errcode.php b/gpxe/contrib/errcode/errcode.php deleted file mode 100644 index 87114495..00000000 --- a/gpxe/contrib/errcode/errcode.php +++ /dev/null @@ -1,83 +0,0 @@ -<? -/* - * Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -// The path to the errcode.py script. -$ERRCODE_PATH = './errcode.py'; -?> - -<html> - <head> - <title>gPXE Error Code Lookup</title> - <style> - body, pre, div, form, p, h2, b, tt { - padding: 0; - border: 0; - margin: 0; - } - body { - padding: 0.5em; - width: 750px; - font-family: sans-serif; - } - pre { - margin: 0.2em; - padding: 0.1em; - background-color: #ddd; - } - form { - margin: 0.2em; - } - div { - margin: 0.2em; - padding: 0.4em; - border: 1px dashed black; - } - </style> - </head> - <body> -<? -if (!empty($_REQUEST['e']) && preg_match('/^(0x)?[0-9a-f]{8}$/', $_REQUEST['e'])) { -?> - <pre> -<? - system($ERRCODE_PATH . " " . $_REQUEST['e']); -?> - </pre> -<? -} -?> - <form action="" method="post"> - <label for="e">Error code:</label> - <input type="text" name="e" id="e" value="0x12345678"></input> - <input type="submit" value="Lookup"></input> - </form> - - <div> - <h2>Hint:</h2> - <p> - Firefox users can right-click on the <b>Error code</b> - text box and select <b>Add a Keyword for this Search...</b>. - Set <b>name</b> to <tt>gPXE Error Code Lookup</tt> and - <b>keyword</b> to <tt>gxpe</tt> Then you can look up error - codes by typing something like the following in your address - bar: <tt>gpxe 0x3c018003</tt> - <p> - </div> - </body> -</html> diff --git a/gpxe/contrib/errcode/errcode.py b/gpxe/contrib/errcode/errcode.py deleted file mode 100644 index 7bc8d9e1..00000000 --- a/gpxe/contrib/errcode/errcode.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -import sys - -try: - import errcodedb -except ImportError: - sys.stderr.write('Please run this first: ./build_errcodedb.py >errcodedb.py\n') - sys.exit(1) - -def to_pxenv_status(errno): - return errno & 0xff - -def to_uniq(errno): - return (errno >> 8) & 0x1f - -def to_errfile(errno): - return (errno >> 13) & 0x7ff - -def to_posix_errno(errno): - return (errno >> 24) & 0x7f - -def lookup_errno_component(defines, component): - if component in defines: - return defines[component] - else: - return '0x%x' % component - -class Errcode(object): - def __init__(self, errno): - self.pxenv_status = to_pxenv_status(errno) - self.uniq = to_uniq(errno) - self.errfile = to_errfile(errno) - self.posix_errno = to_posix_errno(errno) - - def rawstr(self): - return 'pxenv_status=0x%x uniq=%d errfile=0x%x posix_errno=0x%x' % (self.pxenv_status, self.uniq, self.errfile, self.posix_errno) - - def prettystr(self): - return 'pxenv_status=%s uniq=%d errfile=%s posix_errno=%s' % ( - lookup_errno_component(errcodedb.pxenv_status, self.pxenv_status), - self.uniq, - lookup_errno_component(errcodedb.errfile, self.errfile), - lookup_errno_component(errcodedb.posix_errno, self.posix_errno) - ) - - def __str__(self): - return self.prettystr() - -def usage(): - sys.stderr.write('usage: %s ERROR_NUMBER\n' % sys.argv[0]) - sys.exit(1) - -if __name__ == '__main__': - if len(sys.argv) != 2: - usage() - - try: - errno = int(sys.argv[1], 16) - except ValueError: - usage() - - print Errcode(errno) - sys.exit(0) diff --git a/gpxe/contrib/errcode/gpxebot.py b/gpxe/contrib/errcode/gpxebot.py deleted file mode 100644 index f975942f..00000000 --- a/gpxe/contrib/errcode/gpxebot.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -import re -import socket -import errcode - -HOST = 'irc.freenode.net' -PORT = 6667 -NICK = 'gpxebot' -CHAN = '#etherboot' -NICKSERV_PASSWORD = None -IDENT = 'gpxebot' -REALNAME = 'gPXE bot' - -ERRCODE_RE = re.compile(r'(errcode|Error)\s+((0x)?[0-9a-fA-F]{8})') - -NO_ARGS = -1 - -handlers = {} - -def nick_from_mask(mask): - return (mask.find('!') > -1 and mask.split('!', 1)[0]) or mask - -def autojoin(): - del handlers['376'] - if NICKSERV_PASSWORD: - pmsg('nickserv', 'identify %s' % NICKSERV_PASSWORD) - if CHAN: - cmd('JOIN %s' % CHAN) - -def ping(_, arg): - cmd('PONG %s' % arg) - -def privmsg(_, target, msg): - if target == CHAN: - replyto = target - if msg.find(NICK) == -1: - return - elif target == NICK: - replyto = nick_from_mask(who) - m = ERRCODE_RE.search(msg) - if m: - try: - pmsg(replyto, str(errcode.Errcode(int(m.groups()[1], 16)))) - except ValueError: - pass - if msg.find('help') > -1: - pmsg(replyto, 'I look up gPXE error codes. Message me like this:') - pmsg(replyto, 'errcode 0x12345678 OR Error 0x12345678') - -def add_handler(command, handler, nargs): - handlers[command] = (handler, nargs) - -def cmd(msg): - sock.sendall('%s\r\n' % msg) - -def pmsg(target, msg): - cmd('PRIVMSG %s :%s' % (target, msg)) - -def dispatch(args): - command = args[0] - if command in handlers: - h = handlers[command] - if h[1] == NO_ARGS: - h[0]() - elif len(args) == h[1]: - h[0](*args) - -def parse(line): - if line[0] == ':': - who, line = line.split(None, 1) - who = who[1:] - else: - who = None - args = [] - while line and line[0] != ':' and line.find(' ') != -1: - fields = line.split(None, 1) - if len(fields) == 1: - fields.append(None) - arg, line = fields - args.append(arg) - if line: - if line[0] == ':': - args.append(line[1:]) - else: - args.append(line) - return who, args - -add_handler('376', autojoin, NO_ARGS) -add_handler('PING', ping, 2) -add_handler('PRIVMSG', privmsg, 3) - -sock = socket.socket() -sock.connect((HOST, PORT)) -cmd('NICK %s' % NICK) -cmd('USER %s none none :%s' % (IDENT, REALNAME)) - -rbuf = '' -while True: - r = sock.recv(4096) - if not r: - break - rbuf += r - - while rbuf.find('\r\n') != -1: - line, rbuf = rbuf.split('\r\n', 1) - if not line: - continue - who, args = parse(line) - dispatch(args) diff --git a/gpxe/contrib/flashimg/Makefile b/gpxe/contrib/flashimg/Makefile deleted file mode 100644 index 39f58e23..00000000 --- a/gpxe/contrib/flashimg/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -CPPFLAGS = -x assembler-with-cpp -AS86 = as86 -LD86 = ld86 -OBJDUMP = objdump - -.SUFFIXES: .s86 .asm .aout .img - -all: flashimg.img - -clean: - rm -rf *.o *.s86 *.aout *.img - -realclean: clean - rm -rf *.img - -.asm.s86: $*.asm $*.inc - $(CPP) $(CPPFLAGS) -o $@ $*.asm - -.s86.img: $*.s86 - $(AS86) -0 -b $@ $*.s86 - -# .s86.o: $*.s86 -# $(AS86) -0 -a -o $@ $*.s86 -# -# .o.aout: $*.o -# $(LD86) -0 -s -o $@ $*.o -# -# .aout.img: -# dd if=$*.aout of=$@ bs=32 skip=1 diff --git a/gpxe/contrib/flashimg/flashimg.asm b/gpxe/contrib/flashimg/flashimg.asm deleted file mode 100644 index 7a37ed54..00000000 --- a/gpxe/contrib/flashimg/flashimg.asm +++ /dev/null @@ -1,497 +0,0 @@ -; Copyright (C) 1997 Markus Gutschke <gutschk@uni-muenster.de> -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -; Prepend this image file to an arbitrary ROM image. The resulting binary -; can be loaded from any BOOT-Prom that supports the "nbi" file format. -; When started, the image will reprogram the flash EPROM on the FlashCard -; ISA card. The flash EPROM has to be an AMD 29F010, and the programming -; algorithm is the same as that suggested by AMD in the appropriate data -; sheets. - - -#define SEGLOW 0xC800 /* lower range for EPROM segment */ -#define SEGHIGH 0xE800 /* upper range for EPROM segment */ -#define AMD_ID 0x2001 /* flash EPROM ID, only support AMD */ -#define ERASE1_CMD 0x80 /* first cmd for erasing full chip */ -#define ERASE2_CMD 0x10 /* second cmd for erasing full chip */ -#define READID_CMD 0x90 /* cmd to read chip ID */ -#define PROG_CMD 0xA0 /* cmd to program a byte */ -#define RESET_CMD 0xF0 /* cmd to reset chip state machine */ - -;---------------------------------------------------------------------------- - - - .text - .org 0 - -; .globl _main -_main: mov ax,#0x0FE0 - mov ds,ax - mov ax,magic ; verify that we have been loaded by - cmp ax,#0xE4E4 ; boot prom - jnz lderr - jmpi 0x200,0x0FE0 ; adjust code segment -lderr: mov si,#loaderr - cld -lderrlp:seg cs - lodsb ; loop over all characters of - or al,al ; string - jnz lderrnx - xor ah,ah - int 0x16 ; wait for keypress - jmpi 0x0000,0xFFFF ; reboot! -lderrnx:mov ah,#0x0E ; print it - mov bl,#0x07 - xor bh,bh - int 0x10 - jmp lderrlp - -loaderr:.ascii "The flash EPROM utility has to be loaded from a BOOT-Prom" - .byte 0xa,0xd - .ascii "that knows about the 'nbi' file format!" - .byte 0xa,0xd - .ascii "Reboot to proceed..." - .byte 0 - - .org 510 - .byte 0x55,0xAA - -!---------------------------------------------------------------------------- - -start: mov ax,cs - mov ds,ax - mov ax,romdata ; verify that there is an Prom image - cmp ax,#0xAA55 ; attached to the utility - jnz resmag - mov al,romdata+2 - or al,al ; non-zero size is required - jnz magicok -resmag: mov si,#badmagic ; print error message -reset: call prnstr - xor ah,ah - int 0x16 ; wait for keypress - jmpi 0x0000,0xFFFF ; reboot! -magicok:mov di,#clrline1 - mov si,#welcome ; print welcome message -inpnew: call prnstr -inprest:xor bx,bx - mov cl,#0xC ; expect 4 nibbles input data -inploop:xor ah,ah - int 0x16 - cmp al,#0x8 ; <Backspace> - jnz inpnobs - or bx,bx ; there has to be at least one input ch - jz inperr - mov si,#delchar ; wipe out char from screen - call prnstr - add cl,#4 ; compute bitmask for removing input - mov ch,cl - mov cl,#0xC - sub cl,ch - mov ax,#0xFFFF - shr ax,cl - not ax - and bx,ax - mov cl,ch -inploop1:jmp inploop -inpnobs:cmp al,#0x0D ; <Return> - jnz inpnocr - or bx,bx ; zero input -> autoprobing - jz inpdone - cmp cl,#-4 ; otherwise there have to be 4 nibbles - jz inpdone -inperr: mov al,#7 ; ring the console bell - jmp inpecho -inpnocr:cmp al,#0x15 ; <CTRL-U> - jnz inpnokl - mov si,di - call prnstr ; clear entire input and restart - jmp inprest -inpnokl:cmp cl,#-4 ; cannot input more than 4 nibbles - jz inperr - cmp al,#0x30 ; '0' - jb inperr - ja inpdig - or bx,bx ; leading '0' is not allowed - jz inperr -inpdig: cmp al,#0x39 ; '9' - ja inpnodg - mov ch,al - sub al,#0x30 -inpnum: xor ah,ah ; compute new input value - shl ax,cl - add ax,bx - test ax,#0x1FF ; test for 8kB boundary - jnz inperr - cmp ax,#SEGHIGH ; input has to be below E800 - jae inperr - cmp ax,#SEGLOW ; and above/equal C800 - jae inpok - cmp cl,#0xC ; if there is just one nibble, yet, - jnz inperr ; then the lower limit ix C000 - cmp ax,#0xC000 - jb inperr -inpok: mov bx,ax ; adjust bitmask - sub cl,#4 - mov al,ch -inpecho:call prnchr ; output new character - jmp inploop1 -inpnodg:and al,#0xDF ; lower case -> upper case - cmp al,#0x41 ; 'A' - jb inperr - cmp al,#0x46 ; 'F' - ja inperr - mov ch,al - sub al,#0x37 - jmp inpnum -inpdone:or bx,bx ; zero -> autoprobing - jnz probe - mov si,#automsg - call prnstr - mov cx,#0x10 - mov bx,#SEGHIGH ; scan from E800 to C800 -autoprb:sub bx,#0x0200 ; stepping down in 8kB increments - mov di,bx - call readid - cmp ax,#AMD_ID - jz prbfnd - loop autoprb - mov si,#failmsg -nofnd: mov di,#clrline2 - jmp near inpnew ; failure -> ask user for new input -probe: mov di,bx - test bx,#0x07FF ; EPROM might have to be aligned to - jz noalign ; 32kB boundary - call readid - cmp ax,#AMD_ID ; check for AMDs id - jz prbfnd - mov si,#alignmsg - call prnstr - and bx,#0xF800 ; enforce alignment of hardware addr -noalign:call readid ; check for AMDs id - cmp ax,#AMD_ID - jz prbfnd - mov si,#nofndmsg ; could not find any EPROM at speci- - call prnstr ; fied location --- even tried - mov si,#basemsg ; aligning to 32kB boundary - jmp nofnd ; failure -> ask user for new input -prbfnd: mov si,#fndmsg - call prnstr ; we found a flash EPROM - mov ax,bx - call prnwrd - mov si,#ersmsg - call prnstr - call erase ; erase old contents - jnc ersdone - mov si,#failresmsg ; failure -> reboot machine - jmp near reset -ersdone:mov si,#prg1msg ; tell user that we are about - call prnstr ; to program the new data into - mov ax,di ; the specified range - call prnwrd - mov si,#prg2msg - call prnstr - xor dh,dh - mov dl,romdata+2 - shl dx,#1 - mov ah,dh - mov cl,#4 - shl ah,cl - xor al,al - add ax,di - call prnwrd - mov al,#0x3A ; ':' - call prnchr - mov ah,dl - xor al,al - dec ax - call prnwrd - mov al,#0x20 - call prnchr - mov dh,romdata+2 ; number of 512 byte blocks - push ds - mov ax,ds - add ax,#romdata>>4 ; adjust segment descriptor, so that - mov ds,ax ; we can handle images which are -prgloop:mov cx,#0x200 ; larger than 64kB - xor si,si - xor bp,bp - call program ; program 512 data bytes - jc prgerr ; check error condition - mov ax,ds - add ax,#0x20 ; increment segment descriptors - mov ds,ax - add di,#0x20 - dec dh ; decrement counter - jnz prgloop - pop ds - mov si,#donemsg ; success -> reboot -prgdone:call prnstr - mov si,#resetmsg - jmp near reset -prgerr: pop ds ; failure -> reboot - mov si,#failresmsg - jmp prgdone - - -;---------------------------------------------------------------------------- - -; READID -- read EPROM id number, base address is passed in BX -; ====== -; -; changes: AX, DL, ES - -readid: mov dl,#RESET_CMD ; reset chip - call sendop - mov dl,#READID_CMD - call sendop ; send READID command - mov es,bx - seg es - mov ax,0x00 ; read manufacturer ID - mov dl,#RESET_CMD - jmp sendop ; reset chip - - -;---------------------------------------------------------------------------- - -; ERASE -- erase entire EPROM, base address is passed in BX -; ===== -; -; changes: AL, CX, DL, ES, CF - -erase: mov dl,#ERASE1_CMD - call sendop ; send ERASE1 command - mov dl,#ERASE2_CMD - call sendop ; send ERASE2 command - xor bp,bp - mov al,#0xFF - push di - mov di,bx - call waitop ; wait until operation finished - pop di - jnc erfail - mov dl,#RESET_CMD - call sendop ; reset chip - stc -erfail: ret - - -;---------------------------------------------------------------------------- - -; PROGRAM -- write data block at DS:SI of length CX into EPROM at DI:BP -; ======= -; -; changes: AX, CX, DL, BP, ES, CF - -program:mov dl,#PROG_CMD - call sendop ; send programming command - lodsb ; get next byte from buffer - mov es,di - seg es - mov byte ptr [bp],al ; write next byte into flash EPROM - call waitop ; wait until programming operation is - jc progdn ; completed - inc bp - loop program ; continue with next byte - clc ; return without error -progdn: ret - - -;---------------------------------------------------------------------------- - -; SENDOP -- send command in DL to EPROM, base address is passed in BX -; ====== -; -; changes: ES - -sendop: mov es,bx - seg es - mov byte ptr 0x5555,#0xAA ; write magic data bytes into - jcxz so1 ; magic locations. This unlocks -so1: jcxz so2 ; the flash EPROM. N.B. that the -so2: seg es ; magic locations are mirrored - mov byte ptr 0x2AAA,#0x55 ; every 32kB; the hardware address - jcxz so3 ; might have to be adjusted to a -so3: jcxz so4 ; 32kB boundary -so4: seg es - mov byte ptr 0x5555,dl - ret - - -;---------------------------------------------------------------------------- - -; WAITOP -- wait for command to complete, address is passed in DI:BP -; ====== -; -; for details on the programming algorithm, c.f. http://www.amd.com -; -; changes: AX, DL, ES, CF - -waitop: and al,#0x80 ; monitor bit 7 - mov es,di -wait1: seg es ; read contents of EPROM cell that is - mov ah,byte ptr [bp] ; being programmed - mov dl,ah - and ah,#0x80 - cmp al,ah ; bit 7 indicates sucess - je waitok - test dl,#0x20 ; bit 5 indicates timeout/error - jz wait1 ; otherwise wait for cmd to complete - seg es - mov ah,byte ptr [bp] ; check error condition once again, - and ah,#0x80 ; because bits 7 and 5 can change - cmp al,ah ; simultaneously - je waitok - stc - ret -waitok: clc - ret - -;---------------------------------------------------------------------------- - -; PRNSTR -- prints a string in DS:SI onto the console -; ====== -; -; changes: AL - -prnstr: push si - cld -prns1: lodsb ; loop over all characters of - or al,al ; string - jz prns2 - call prnchr ; print character - jmp prns1 -prns2: pop si - ret - - -;---------------------------------------------------------------------------- - -; PRNWRD, PRNBYT, PRNNIB, PRNCHR -- prints hexadezimal values, or ASCII chars -; ====== ====== ====== ====== -; -; changes: AX - -prnwrd: push ax - mov al,ah - call prnbyt ; print the upper byte - pop ax -prnbyt: push ax - shr al,1 ; prepare upper nibble - shr al,1 - shr al,1 - shr al,1 - call prnnib ; print it - pop ax -prnnib: and al,#0x0F ; prepare lower nibble - add al,#0x30 - cmp al,#0x39 ; convert it into hex - jle prnchr - add al,#7 -prnchr: push bx - mov ah,#0x0E ; print it - mov bl,#0x07 - xor bh,bh - int 0x10 - pop bx - ret - - -;---------------------------------------------------------------------------- - -magic: .byte 0xE4,0xE4 - -badmagic:.byte 0xa,0xd - .ascii "There does not appear to be a ROM image attached to the" - .ascii "flash EPROM utility;" - .byte 0xa,0xd -resetmsg:.ascii "Reboot to proceed..." - .byte 0 - -welcome:.byte 0xa,0xd - .ascii "Flash EPROM programming utility V1.0" - .byte 0xa,0xd - .ascii "Copyright (c) 1997 by M. Gutschke <gutschk@uni-muenster.de>" - .byte 0xa,0xd - .ascii "===========================================================" - .byte 0xa,0xd -prompt: .byte 0xa,0xd - .ascii "Enter base address for AMD29F010 flash EPROM on FlashCard or" - .byte 0xa,0xd - .ascii "press <RETURN> to start autoprobing; the base address has" - .byte 0xa -clrline1:.byte 0xd - .ascii "to be in the range C800..E600: " - .ascii " " - .byte 0x8,0x8,0x8,0x8 - .byte 0 - -delchar:.byte 0x8,0x20,0x8 - .byte 0 - -automsg:.ascii "autoprobing... " - .byte 0 - -failmsg:.ascii "failed!" -basemsg:.byte 0xa -clrline2:.byte 0xd - .ascii "Enter base address: " - .ascii " " - .byte 0x8,0x8,0x8,0x8 - .byte 0 - -fndmsg: .byte 0xa,0xd - .ascii "Found flash EPROM at: " - .byte 0 - -alignmsg:.byte 0xa,0xd - .ascii "FlashCard requires the hardware address to be aligned to a" - .byte 0xa,0xd - .ascii "32kB boundary; automatically adjusting..." - .byte 0 - -nofndmsg:.byte 0xa,0xd - .ascii "No AMD29F010 flash EPROM found" - .byte 0 - -ersmsg: .byte 0xa,0xd - .ascii "Erasing old contents... " - .byte 0 - -prg1msg:.ascii "done" - .byte 0xa,0xd - .ascii "Programming from " - .byte 0 - -prg2msg:.ascii ":0000 to " - .byte 0 - -donemsg:.ascii "done!" - .byte 0xa,0xd - .byte 0 - -failresmsg: - .ascii "failed!" - .byte 0xa,0xd - .byte 0 - - -;---------------------------------------------------------------------------- - - .align 16 - .org *-1 - .byte 0x00 -romdata: diff --git a/gpxe/contrib/flashimg/flashimg.img b/gpxe/contrib/flashimg/flashimg.img Binary files differdeleted file mode 100644 index 263d3392..00000000 --- a/gpxe/contrib/flashimg/flashimg.img +++ /dev/null diff --git a/gpxe/contrib/hdload/Makefile b/gpxe/contrib/hdload/Makefile deleted file mode 100644 index 9ed750de..00000000 --- a/gpxe/contrib/hdload/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# Use nasm or as86 -ASM=nasm -# ASM=as86 - -hdload.bin: hdload.S -ifeq ($(ASM),as86) - gcc $(CFLAGS) -DUSE_AS86 -E -traditional -o hdload.s hdload.S - as86 -0 -b hdload.bin hdload.s -else - gcc $(CFLAGS) -DUSE_NASM -E -traditional -o hdload.s hdload.S - nasm -f bin hdload.s -o hdload.bin -endif - -clean: - $(RM) -f hdload.s hdload.bin diff --git a/gpxe/contrib/hdload/hdload.S b/gpxe/contrib/hdload/hdload.S deleted file mode 100644 index 3bb5649b..00000000 --- a/gpxe/contrib/hdload/hdload.S +++ /dev/null @@ -1,162 +0,0 @@ -#if !defined(USE_NASM) && !defined(USE_AS86)
-#define USE_AS86
-#endif
-
-#ifdef USE_AS86
-#define CON(x) *x
-#define BCON(x) *x
-#define WCON(x) *x
-#define LOC(x) x
-#define BLOC(x) byte ptr x
-#define WLOC(x) word ptr x
-#define JMP(x) jmp x
-#define STRDECL(s) .ascii s
-#define SEGCS seg cs
-#define SEGES seg es
-#define ALIGN(x) .align x
-#define SPACE(x) .space x
-#endif
-
-#ifdef USE_NASM
-#define CON(x) x
-#define BCON(x) byte x
-#define WCON(x) word x
-#define LOC(x) [x]
-#define BLOC(x) byte [x]
-#define WLOC(x) word [x]
-#define JMP(x) jmp short x
-#define STRDECL(s) db s
-#define SEGCS cs
-#define SEGES es
-#define ALIGN(x) align x, db 0
-#define SPACE(x) times x db 0
-#endif
-
-ROMLOAD equ 0x5000
-
-start:
- cli
- xor ax, ax
- mov ss, ax
- mov sp, CON(0x7C00)
- mov si, sp
- mov es, ax
- mov ds, ax
- sti
- cld
- mov di, CON(0x600)
- mov cx, CON(0x100)
- rep
- movsw
- db 0xEA
- dw jump
- dw 0
-jump:
- mov si, CON(Hlaska)
- call print
-
- ; rozmery prvniho HD
- mov ah, CON(8)
- mov dl, CON(0x80)
- int 0x13
- jc chyba
- ; dh - H, cx - CS
-
- ; prvi stopa obsahuje bootrom, tak ji natahneme do RAM
- mov ah, CON(2)
- mov al, cl
- and al, CON(0x3F)
- dec al
- mov dx, CON(0x80)
- mov cx, CON(2)
- mov bx, CON(ROMLOAD)
- mov es, bx
- xor bx, bx
- int 0x13
- jc chyba
-
- ; hromada kodu podle zdrojaku netboot
- xor di, di
- mov es, di
- mov di, CON(0x380)
- push di
- mov cx, CON(10)
- cld
- rep
- stosw
- pop di
-#ifdef USE_AS86
- mov word ptr [ di ], CON(0x5a5a)
- mov byte ptr [ di + 2 ], CON(0x50)
- mov word ptr [ di + 0x10 ], CON(0xFFFF)
- mov word ptr [ di + 0x12 ], CON(0xFFFF)
-#endif
-#ifdef USE_NASM
- mov word [ di ], CON(0x5a5a)
- mov byte [ di + 2 ], CON(0x50)
- mov word [ di + 10h ], CON(0xFFFF)
- mov word [ di + 12h ], CON(0xFFFF)
-#endif
-
- ; navratova adresa, kdyby nezabrala ROM
- SEGCS
- mov WLOC(OfsErr), CON(RomErr)
- push cs
- push WCON(chyba)
- mov ax, CON(ROMLOAD)
- mov es, ax
- push es
- ; kouzelny jump....
- SEGES
- mov si, [ 0x1a ]
- SEGES
-#ifdef USE_AS86
- push word ptr [ si + 0x1a ] ; ...do bootrom v RAM
-#endif
-#ifdef USE_NASM
- push word [ si + 0x1a ] ; ...do bootrom v RAM
-#endif
- retf
-
-chyba:
- SEGCS
- mov si, LOC(OfsErr)
- call print
- mov si, CON(CRLF)
- call print
- JMP(chyba)
-
-print:
- lodsb
- cmp al,CON(0)
- je navrat
- push si
- mov bx,CON(7)
- mov ah,CON(0x0E)
- int 0x10
- pop si
- JMP(print)
-
-navrat:
- ret
-
-Hlaska: db 13, 10
- STRDECL('HD Net Loader v1.0 (c) poli 1999')
- db 13, 10, 0
-CRLF: db 13, 10, 0
-OfsErr: dw Error
-Error: STRDECL('Error load from HD !')
- db 0
-RomErr: STRDECL('ROM Error !')
- db 0
-
-mbrend:
- ret
-
-#ifdef USE_AS86
- org 510
-#endif
-#ifdef USE_NASM
- times 510-($-$$) db 0
-#endif
- dw 0xAA55
diff --git a/gpxe/contrib/hdload/petr.msg b/gpxe/contrib/hdload/petr.msg deleted file mode 100644 index a3134d04..00000000 --- a/gpxe/contrib/hdload/petr.msg +++ /dev/null @@ -1,175 +0,0 @@ -From netboot-owner@baghira.han.de Thu Sep 16 12:08:44 1999 -Return-Path: <netboot-owner@baghira.han.de> -Received: (from factotum@localhost) - by baghira.han.de (8.9.3/8.9.3) id NAA23838 - for netboot-outgoing; Wed, 15 Sep 1999 13:12:44 +0200 -X-Authentication-Warning: baghira.han.de: factotum set sender to owner-netboot using -f -Received: from hathi.han.de (root@hathi.han.de [192.109.225.1]) - by baghira.han.de (8.9.3/8.9.3) with ESMTP id NAA23785 - for <netboot@baghira.han.de>; Wed, 15 Sep 1999 13:11:02 +0200 -Received: from vsb.cz (root@decsys.vsb.cz [158.196.149.9]) - by hathi.han.de (8.9.3/8.9.3) with ESMTP id NAA04707 - for <netboot@baghira.han.de>; Wed, 15 Sep 1999 13:11:00 +0200 -Received: from nwfei1.vsb.cz (nwfei1.vsb.cz [158.196.146.13]) - by vsb.cz (8.9.3/8.9.1) with ESMTP id NAA22363 - for <netboot@baghira.han.de>; Wed, 15 Sep 1999 13:10:52 +0200 (MET DST) -Received: from FEI1/SpoolDir by nwfei1.vsb.cz (Mercury 1.44); - 15 Sep 99 13:10:50 +0100 -Received: from SpoolDir by FEI1 (Mercury 1.44); 15 Sep 99 13:10:27 +0100 -Received: from pcd403z.vsb.cz (158.196.146.9) by nwfei1.vsb.cz (Mercury 1.44) with ESMTP; - 15 Sep 99 13:10:25 +0100 -Received: from oli10 by pcd403z.vsb.cz with local-esmtp (Exim 2.05 #1 (Debian)) - id 11RCxI-0000oT-00; Wed, 15 Sep 1999 13:10:28 +0200 -Date: Wed, 15 Sep 1999 13:10:28 +0200 (CEST) -From: Petr Olivka <Petr.Olivka@vsb.cz> -To: netboot@baghira.han.de -Subject: netboot image on hard disk - it is easy -In-Reply-To: <37DF4BD4.E8FFF8FC@gsmbox.com> -Message-ID: <Pine.LNX.4.10.9909151247430.2936-100000@pcd403z.vsb.cz> -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=US-ASCII -Sender: owner-netboot@baghira.han.de -Precedence: bulk -Reply-To: netboot@baghira.han.de -X-Moderator: netboot-owner@baghira.han.de - -It is good joke, at this moment I have only simple version of MBR to load -image from HD, but only from track 0. HD have to have enough sectors per -track for rom image. -And small program in turbo-pascal to download image to HD. - -below is assembler code for MBR. Is writen for tasm and tlink. -If you have 512 bytes binary file with MBR code, then concat it with -rom-image and download to hda. BUT NOT DIRECTLY !!!! You have to copy -partition table ( and NT signature ) to MBR and then download. BUT ONLY tO -TRACK 0. - -Everything in your own risk. - -If I will have some free time, I will write some code directly to netboot. - -poli - -.model large, pascal - -.code -.386 - public mbrasm, mbrend - -ROMLOAD equ 5000h - - org 600h - -mbrasm proc - - cli - xor ax, ax - mov ss, ax - mov sp, 7C00h - mov si, sp - mov es, ax - mov ds, ax - sti - cld - mov di, 600h - mov cx, 100h - rep movsw - db 0EAh - dw offset @@jump - dw 0 -@@jump: - mov si, offset Hlaska - call @@print - - ; rozmery prvniho HD - mov ah, 8 - mov dl, 80h - int 13h - jc @@chyba - ; dh - H, cx - CS - - ; prvi stopa obsahuje bootrom, tak ji natahneme do RAM - mov ah, 2 - mov al, cl - and al, 3Fh - dec al - mov dx, 80h - mov cx, 2 - mov bx, ROMLOAD - mov es, bx - xor bx, bx - int 13h - jc @@chyba - - ; hromada kodu podle zdrojaku netboot - xor di, di - mov es, di - mov di, 380h - push di - mov cx, 10 - cld - rep stosw - pop di - mov word ptr [ di ], 5a5ah - mov byte ptr [ di + 2 ], 50h - mov word ptr [ di + 10h ], 0FFFFh - mov word ptr [ di + 12h ], 0FFFFh - - ; navratova adresa, kdyby nezabrala ROM - mov OfsErr, offset RomErr - push cs - push offset @@chyba - - mov ax, ROMLOAD - mov es, ax - push es - ; kouzelny jump.... - mov si, es:[ 1ah ] - push word ptr es:[ si + 1ah ] ; ...do bootrom v RAM - retf - -@@chyba: - mov si, OfsErr - call @@print - mov si, offset CRLF - call @@print - jmp @@chyba - -@@print: - lodsb - cmp al,0 - je @@navrat - push si - mov bx,7 - mov ah,0Eh - int 10h - pop si - jmp @@print - -@@navrat: - retn - -Hlaska db 13, 10, 'HD Net Loader v1.0 (c) poli 1999', 13, 10, 0 -CRLF db 13, 10, 0 -OfsErr dw offset Error -Error db 'Error load from HD !', 0 -RomErr db 'ROM Error !', 0 - -mbrasm endp - -mbrend proc - ret -mbrend endp - - org 800h - 2 - dw 0AA55h - -end - -=========================================================================== -This Mail was sent to netboot mailing list by: -Petr Olivka <Petr.Olivka@vsb.cz> -To get help about this list, send a mail with 'help' as the only string in -it's body to majordomo@baghira.han.de. If you have problems with this list, -send a mail to netboot-owner@baghira.han.de. - diff --git a/gpxe/contrib/initrd/ChangeLog b/gpxe/contrib/initrd/ChangeLog deleted file mode 100644 index 94f8f6aa..00000000 --- a/gpxe/contrib/initrd/ChangeLog +++ /dev/null @@ -1,46 +0,0 @@ -mkinitrd-net ChangeLog - -Last Modified: Fri Jul 26 23:08:28 2002 - -$Log$ -Revision 1.1 2005/05/17 16:45:02 mcb30 -Initial revision - -Revision 1.1 2002/11/06 06:31:06 ken_yap -Contributed by Michael Brown. - -Revision 1.10 2002/07/26 23:09:13 mcb30 -Support for new binary etherboot.nic-dev-id structure -Added --kernel option patch from Stew Benedict at MandrakeSoft -Only try to use sudo if we are not already root - -Revision 1.9 2002/06/05 13:31:50 mcb30 -Modifications to allow DHCP, TFTP and NFS servers to be separate machines. - -Revision 1.8 2002/05/30 11:41:18 mcb30 -/tftpboot symlinked to /var/lib/tftpboot -Has ability to be quiet if "quiet" specified on kernel cmdline - -Revision 1.7 2002/05/26 11:15:04 mcb30 -PCI-ID auto-mapping via dhcpd.conf.etherboot-pcimap.include - -Revision 1.6 2002/05/24 02:05:11 mcb30 -Bugfixes, migrated /tftpboot to /var/lib/tftpboot - -Revision 1.5 2002/05/23 21:29:58 mcb30 -Now includes dhcpd.conf.etherboot.include -Automatically scans for all network modules in the pcimap file - -Revision 1.4 2002/05/08 09:04:31 mcb30 -Bugfixes: tmpdir selection, linuxrc typos, ifconfig peculiarities - -Revision 1.3 2002/05/04 21:44:13 mcb30 -During %make, LIBDIR must be set for mknbi -Added %post scriptlet since %trigger seems not to be being triggered... - -Revision 1.2 2002/05/04 21:20:32 mcb30 -Added extra sources instead of requiring "make" to download them - -Revision 1.1 2002/05/04 13:19:40 mcb30 -First attempt at an RPM package - diff --git a/gpxe/contrib/initrd/Makefile b/gpxe/contrib/initrd/Makefile deleted file mode 100644 index f18b73f6..00000000 --- a/gpxe/contrib/initrd/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -UCLIBC_VERSION = 0.9.11 -UCLIBC = uClibc-$(UCLIBC_VERSION) -$(UCLIBC)_SOURCE = http://www.uclibc.org/downloads/$(UCLIBC).tar.bz2 -UCLIBC_INSTALL = $(CURDIR)/uClibc - -UDHCP_VERSION = 0.9.7 -UDHCP = udhcp-$(UDHCP_VERSION) -$(UDHCP)_SOURCE = http://udhcp.busybox.net/source/$(UDHCP).tar.gz - -BUSYBOX_VERSION = 0.60.3 -BUSYBOX = busybox-$(BUSYBOX_VERSION) -$(BUSYBOX)_SOURCE = http://www.busybox.net/downloads/$(BUSYBOX).tar.bz2 - -LINUX_WLAN_VERSION = 0.1.13 -LINUX_WLAN = linux-wlan-ng-$(LINUX_WLAN_VERSION) -$(LINUX_WLAN)_SOURCE = ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/$(LINUX_WLAN).tar.gz - -MKNBI_VERSION = 1.2 -MKNBI = mknbi-$(MKNBI_VERSION) -$(MKNBI)_SOURCE = http://belnet.dl.sourceforge.net/sourceforge/etherboot/$(MKNBI).tar.gz - -export PATH := $(UCLIBC_INSTALL)/bin:$(PATH) - -all : utils initrd-skel mknbi mknbi-linux - # Run "make tftpboot/initrd-kernel_module.img" to generate a suitable initrd - # Run "make tftpboot/boot-kernel_module.nbi" to generate a suitable NBI - # Run "make all-nbi" to generate a complete set of NBIs - -%.tar.bz2 : - [ -d $* ] || wget $($*_SOURCE) - [ -f $*.t*gz ] && ( gunzip $*.t*gz ; bzip2 -9 $*.tar ) || true - -UTILS = udhcpc busybox wlanctl - -utils : $(UTILS) - -clean : partlyclean - rm -rf uClibc - rm -rf $(UCLIBC) - rm -rf tftpboot/* - -partlyclean : - rm -rf $(UDHCP) - rm -rf $(BUSYBOX) - rm -rf $(LINUX_WLAN) - rm -rf $(MKNBI) - rm -rf initrd-skel - rm -f *.img *.ird *.nbi insert-modules - rm -f $(UTILS) mknbi-linux - rm -f *.uClibc *.busybox *.udhcpc *.wlanctl - -.PHONY : all utils clean partlyclean - -uClibc : $(UCLIBC) - rm -rf $@ - $(MAKE) -C $(UCLIBC) install - -$(UCLIBC) : $(UCLIBC).tar.bz2 - [ -d $@ ] || tar xvjf $< - [ -f $(UCLIBC)/Config ] || perl -pe 's/^(INCLUDE_RPC).*/$$1 = true/ ;' \ - -e 's{^(DEVEL_PREFIX).*}{$$1 = $(UCLIBC_INSTALL)} ;' \ - -e 's{^(SHARED_LIB_LOADER_PATH).*}{$$1 = /lib} ;' \ - $(UCLIBC)/extra/Configs/Config.i386 > $(UCLIBC)/Config - # Stripping out spurious CVS directories (screws up local cvs update) - rm -rf `find $(UCLIBC) -name CVS` - $(MAKE) -C $(UCLIBC) - install -m 644 $(UCLIBC)/COPYING.LIB COPYING.uClibc - -udhcpc : $(UDHCP) - install -m 755 -s $(UDHCP)/$@ $@ - -$(UDHCP) : $(UDHCP).tar.bz2 uClibc - [ -d $@ ] || tar xvjf $< - if [ ! -f $@/.script.c.patch ]; then \ - patch -d $@ -b -z .orig < script.c.patch ; \ - touch $@/.script.c.patch ; \ - fi - $(MAKE) LDFLAGS+=-static -C $(UDHCP) - install -m 644 $(UDHCP)/AUTHORS AUTHORS.udhcpc - install -m 644 $(UDHCP)/COPYING COPYING.udhcpc - -busybox : $(BUSYBOX) - install -m 755 -s $(BUSYBOX)/$@ $@ - -$(BUSYBOX) : $(BUSYBOX).tar.bz2 uClibc - [ -d $@ ] || tar xvjf $< - perl -pi.orig -e \ - 's/^.*(#define BB_(FEATURE_NFSMOUNT|INSMOD|PIVOT_ROOT|IFCONFIG|ROUTE)).*/$$1/' \ - $(BUSYBOX)/Config.h - perl -pi.orig -e \ - 's/^(DOSTATIC).*$$/$$1 = true/' \ - $(BUSYBOX)/Makefile - $(MAKE) -C $(BUSYBOX) - install -m 644 $(BUSYBOX)/AUTHORS AUTHORS.busybox - install -m 644 $(BUSYBOX)/LICENSE LICENSE.busybox - -wlanctl : $(LINUX_WLAN) - install -m 755 -s $(LINUX_WLAN)/src/wlanctl/$@ $@ - -$(LINUX_WLAN) : $(LINUX_WLAN).tar.bz2 uClibc linux-wlan.cfg - [ -d $@ ] || tar xvjf $< - cd $(LINUX_WLAN) ; ./Configure -d ../linux-wlan.cfg - perl -pi.orig -e \ - 's/(-o wlanctl)/-static $$1/' \ - $(LINUX_WLAN)/src/wlanctl/Makefile - $(MAKE) -C $(LINUX_WLAN)/src/wlanctl - install -m 644 $(LINUX_WLAN)/COPYING COPYING.wlanctl - install -m 644 $(LINUX_WLAN)/LICENSE LICENSE.wlanctl - install -m 644 $(LINUX_WLAN)/THANKS THANKS.wlanctl - -mknbi-linux : $(MKNBI) - -mknbi : $(MKNBI) - -$(MKNBI) : $(MKNBI).tar.bz2 - [ -d $@ ] || tar xvjf $< - if [ ! -f $@/.mknbi-encap.patch ]; then \ - patch -d $@ -b -z .orig < mknbi-encap.patch ; \ - touch $@/.mknbi-encap.patch ; \ - fi - make -C $(MKNBI) LIBDIR=`pwd`/$(MKNBI) mknbi - install -m 755 $(MKNBI)/mknbi mknbi-linux - make -C $(MKNBI) clean - make -C $(MKNBI) - -initrd-skel : $(UTILS) linuxrc udhcpc-post include-modules - rm -rf $@ - mkdir -p $@ - mkdir -p $@/dev - mkdir -p $@/etc - mkdir -p $@/bin - mkdir -p $@/lib - mkdir -p $@/lib/modules - mkdir -p $@/proc - mkdir -p $@/sysroot - ln -s bin $@/sbin - install -m 755 busybox $@/bin/ - install -m 755 udhcpc $@/bin/ - install -m 755 wlanctl $@/bin/ - ln -s busybox $@/bin/sh - ln -s busybox $@/bin/echo - ln -s busybox $@/bin/mknod - ln -s busybox $@/bin/chmod - ln -s busybox $@/bin/insmod - ln -s busybox $@/bin/ifconfig - ln -s busybox $@/bin/route - ln -s busybox $@/bin/mount - ln -s busybox $@/bin/pivot_root - ln -s busybox $@/bin/umount - ln -s busybox $@/bin/[ - ln -s busybox $@/bin/sleep - ln -s busybox $@/bin/grep - - install -m 755 linuxrc $@/linuxrc - install -m 755 udhcpc-post $@/bin/udhcpc-post - -tftpboot/initrd-%.img : initrd-skel - ./mkinitrd-net -l `echo $* | tr . " "` - -tftpboot/boot-%.nbi : tftpboot/initrd-%.img mknbi-linux - ./mknbi-linux --format=nbi --target=linux /boot/vmlinuz $< > $@ - sudo cp $@ $(tftpbootdir) - -all-nbi : all - ./mknbi-set -l -v - ls tftpboot - -prefix = /usr -sysconfdir = /etc -bindir = $(prefix)/bin -libdir = $(prefix)/lib -mandir = $(prefix)/share/man -docdir = $(prefix)/share/doc -tftpbootdir = /var/lib/tftpboot -initrdskeldir = $(prefix)/lib/mkinitrd-net/initrd-skel - -install : - mkdir -p $(libdir)/mknbi - mkdir -p $(bindir) - mkdir -p $(sysconfdir) - mkdir -p $(tftpbootdir) - mkdir -p $(initrdskeldir) - install -m 755 mkinitrd-net include-modules mknbi-set $(bindir)/ - cp -a initrd-skel/* $(initrdskeldir)/ - install -m 644 mknbi-set.conf dhcpd.conf.etherboot.include $(sysconfdir) - make -C $(MKNBI) INSTPREFIX=$(prefix) MANDIR=$(mandir)/man1 \ - DOCDIR=$(docdir)/$(MKNBI) install diff --git a/gpxe/contrib/initrd/Manifest b/gpxe/contrib/initrd/Manifest deleted file mode 100644 index b41e7255..00000000 --- a/gpxe/contrib/initrd/Manifest +++ /dev/null @@ -1,15 +0,0 @@ -initrd/ChangeLog -initrd/Makefile -initrd/Manifest -initrd/README -initrd/dhcpd.conf.etherboot.include -initrd/include-modules -initrd/linux-wlan.cfg -initrd/linuxrc -initrd/mkinitrd-net -initrd/mkinitrd-net.spec -initrd/mknbi-encap.patch -initrd/mknbi-set -initrd/mknbi-set.conf -initrd/script.c.patch -initrd/udhcpc-post diff --git a/gpxe/contrib/initrd/README b/gpxe/contrib/initrd/README deleted file mode 100644 index 5152425a..00000000 --- a/gpxe/contrib/initrd/README +++ /dev/null @@ -1,37 +0,0 @@ -README for mkinitrd-net - -mkinitrd-net enables you to use your distribution's stock kernel for -diskless workstations, without having to compile in support for the -relevant network card(s). It creates an initial ramdisk image containing -the required network-card kernel modules and bootstrap scripts to load the -module, obtain an IP address via DHCP and mount the root filesystem via -NFS. - -mkinitrd-net also generates a dhcpd.conf file fragment that can be used to -automate the process of mapping NBI files to clients, based on the PCI IDs -of their network cards. Etherboot will send the PCI ID of the network -card to the DHCP server in the etherboot-encapsulated-options field -(Etherboot 5.0.7 and newer) and the DHCP server can use this to identify -the correct NBI to point the client towards. - -The end result is that: - -a) You can avoid the hassle of compiling custom kernels for diskless - workstations. - -b) Diskless workstations will automatically download the correct - kernel+initrd. - -c) You have an easier life! :-) - - - -mkinitrd-net is Copyright Fen Systems Ltd. 2001. mkinitrd-net itself is -licensed under the GNU GPL. It incorporates code from the uClibc, -busybox, udhcpc and Etherboot projects, each of which has its own licence -terms. Standard disclaimers apply. - -The copy of mkinitrd-net in the Etherboot contribs is not the -authoritative copy of mkinitrd-net; please do not make modifications to -this copy. Patches should be sent to Michael Brown -<mbrown@fensystems.co.uk>. diff --git a/gpxe/contrib/initrd/dhcpd.conf.etherboot.include b/gpxe/contrib/initrd/dhcpd.conf.etherboot.include deleted file mode 100644 index 9cec1dc1..00000000 --- a/gpxe/contrib/initrd/dhcpd.conf.etherboot.include +++ /dev/null @@ -1,207 +0,0 @@ -# dhcpd.conf include file for Etherboot -# -# Include this file from your /etc/dhcpd.conf -# $Id$ - -# Definition of Etherboot options -# (taken from vendortags.html) - -# We use an encapsulated option space to avoid polluting the site-local DHCP option space -# -option space etherboot; -option etherboot-encapsulated-options code 150 = encapsulate etherboot; - -# Definition of option codes within the etherboot-encapsulated-options space -# -option etherboot.extensions-path code 18 = string; -option etherboot.magic code 128 = string; -option etherboot.kernel-cmdline code 129 = string; -option etherboot.menu-opts code 160 = string; -option etherboot.nic-dev-id code 175 = string; -option etherboot.menu-selection code 176 = unsigned integer 8; -option etherboot.motd-1 code 184 = string; -option etherboot.motd-2 code 185 = string; -option etherboot.motd-3 code 186 = string; -option etherboot.motd-4 code 187 = string; -option etherboot.motd-5 code 188 = string; -option etherboot.motd-6 code 189 = string; -option etherboot.motd-7 code 190 = string; -option etherboot.motd-8 code 191 = string; -option etherboot.image-1 code 192 = string; -option etherboot.image-2 code 193 = string; -option etherboot.image-3 code 194 = string; -option etherboot.image-4 code 195 = string; -option etherboot.image-5 code 196 = string; -option etherboot.image-6 code 197 = string; -option etherboot.image-7 code 198 = string; -option etherboot.image-8 code 199 = string; -option etherboot.image-9 code 200 = string; -option etherboot.image-10 code 201 = string; -option etherboot.image-11 code 202 = string; -option etherboot.image-12 code 203 = string; -option etherboot.image-13 code 204 = string; -option etherboot.image-14 code 205 = string; -option etherboot.image-15 code 206 = string; -option etherboot.image-16 code 207 = string; -option etherboot.kmod code 254 = string; - -# Legacy support for Etherboot options as site-local options (i.e. non-encapsulated) -# Note: options defined after the switch to encapsulated options should not be defined here -# -option legacy-etherboot-magic code 128 = string; -option legacy-etherboot-kernel-cmdline code 129 = string; -option legacy-etherboot-menu-opts code 160 = string; -option legacy-etherboot-menu-selection code 176 = unsigned integer 8; -option legacy-etherboot-motd-1 code 184 = string; -option legacy-etherboot-motd-2 code 185 = string; -option legacy-etherboot-motd-3 code 186 = string; -option legacy-etherboot-motd-4 code 187 = string; -option legacy-etherboot-motd-5 code 188 = string; -option legacy-etherboot-motd-6 code 189 = string; -option legacy-etherboot-motd-7 code 190 = string; -option legacy-etherboot-motd-8 code 191 = string; -option legacy-etherboot-image-1 code 192 = string; -option legacy-etherboot-image-2 code 193 = string; -option legacy-etherboot-image-3 code 194 = string; -option legacy-etherboot-image-4 code 195 = string; -option legacy-etherboot-image-5 code 196 = string; -option legacy-etherboot-image-6 code 197 = string; -option legacy-etherboot-image-7 code 198 = string; -option legacy-etherboot-image-8 code 199 = string; -option legacy-etherboot-image-9 code 200 = string; -option legacy-etherboot-image-10 code 201 = string; -option legacy-etherboot-image-11 code 202 = string; -option legacy-etherboot-image-12 code 203 = string; -option legacy-etherboot-image-13 code 204 = string; -option legacy-etherboot-image-14 code 205 = string; -option legacy-etherboot-image-15 code 206 = string; -option legacy-etherboot-image-16 code 207 = string; - -# Apply Etherboot options only for Etherboot clients -# -if substring ( option vendor-class-identifier, 0, 9 ) = "Etherboot" { - - # We must specify this value for etherboot-magic, or Etherboot will - # ignore all other options. - # - option etherboot.magic E4:45:74:68:00:00; - - # Bootfile name: derive from etherboot.kmod (calculated below) - # Use boot.nbi if no NIC_DEV_ID option present - # (i.e. if etherboot.kmod doesn't get set) - # Also pass filename back in filename field - # - option bootfile-name = pick-first-value ( concat ( "boot-", - config-option etherboot.kmod, - ".nbi" ), - "boot.nbi" ) ; - filename = config-option bootfile-name; - - # "Sensible" default values for some options - - # Mount devfs (will probably be needed for a network-boot) - option etherboot.kernel-cmdline " devfs=mount"; - - # Info message (includes client IP address, MAC address, hardware ID string, - # server IP address and name of boot file) - option etherboot.motd-4 = concat ( "Using Etherboot to boot ", - binary-to-ascii ( 10, 8, ".", leased-address ), - " [", - binary-to-ascii ( 16, 8, ":", suffix ( hardware, 6 ) ), - "] [", - pick-first-value ( option etherboot.nic-dev-id, "unknown card" ), - "]", 0d:0a, " from ", - binary-to-ascii ( 10, 8, ".", option dhcp-server-identifier ), - " with file ", - config-option tftp-server-name, - ":", - config-option bootfile-name, - " [", - pick-first-value ( config-option etherboot.kmod, "unknown module" ), - "]", 0d:0a ); - - # Legacy site-local option support - # If client does not include an etherboot-encapsulated-options field in its DHCPREQUEST, then - # it will not understand etherboot-encapsulated-options in the DHCPACK and so we must send - # back the options as site-local options (i.e. not encapsulated). - # Note: we need do this only for options that existed prior to the switch to encapsulation. - # - if not exists etherboot-encapsulated-options { - option legacy-etherboot-magic = config-option etherboot.magic; - option legacy-etherboot-kernel-cmdline = config-option etherboot.kernel-cmdline; - option legacy-etherboot-menu-opts = config-option etherboot.menu-opts; - option legacy-etherboot-menu-selection = config-option etherboot.menu-selection; - option legacy-etherboot-motd-1 = config-option etherboot.motd-1; - option legacy-etherboot-motd-2 = config-option etherboot.motd-2; - option legacy-etherboot-motd-3 = config-option etherboot.motd-3; - option legacy-etherboot-motd-4 = config-option etherboot.motd-4; - option legacy-etherboot-motd-5 = config-option etherboot.motd-5; - option legacy-etherboot-motd-6 = config-option etherboot.motd-6; - option legacy-etherboot-motd-7 = config-option etherboot.motd-7; - option legacy-etherboot-motd-8 = config-option etherboot.motd-8; - option legacy-etherboot-image-1 = config-option etherboot.image-1; - option legacy-etherboot-image-2 = config-option etherboot.image-2; - option legacy-etherboot-image-3 = config-option etherboot.image-3; - option legacy-etherboot-image-4 = config-option etherboot.image-4; - option legacy-etherboot-image-5 = config-option etherboot.image-5; - option legacy-etherboot-image-6 = config-option etherboot.image-6; - option legacy-etherboot-image-7 = config-option etherboot.image-7; - option legacy-etherboot-image-8 = config-option etherboot.image-8; - option legacy-etherboot-image-9 = config-option etherboot.image-9; - option legacy-etherboot-image-10 = config-option etherboot.image-10; - option legacy-etherboot-image-11 = config-option etherboot.image-11; - option legacy-etherboot-image-12 = config-option etherboot.image-12; - option legacy-etherboot-image-13 = config-option etherboot.image-13; - option legacy-etherboot-image-14 = config-option etherboot.image-14; - option legacy-etherboot-image-15 = config-option etherboot.image-15; - option legacy-etherboot-image-16 = config-option etherboot.image-16; - } -} - -# Some options should be set for both Etherboot and the udhcpc client -# -if ( ( substring ( option vendor-class-identifier, 0, 9 ) = "Etherboot" ) - or ( substring ( option vendor-class-identifier, 0, 5 ) = "udhcp" ) ) { - - # TFTP server defaults to DHCP server and is specified in both - # next-server field and tftp-server-name option field - # - option tftp-server-name = binary-to-ascii ( 10, 8, ".", config-option dhcp-server-identifier ); - server-name = config-option tftp-server-name; - next-server = config-option dhcp-server-identifier; - - # Root path defaults to root of TFTP server - option root-path = concat ( config-option tftp-server-name, ":/" ); - - # A fallback hostname, generated from the IP address - option host-name = concat ( "client_", binary-to-ascii ( 10, 8, "_", leased-address ) ); -} - -# Force some items onto parameter request list for udhcp -# -if substring ( option vendor-class-identifier, 0, 5 ) = "udhcp" { - # Forcibly add root-path to list - option dhcp-parameter-request-list = concat ( option dhcp-parameter-request-list, 11 ); -} - -# Etherboot sends a string to identify the NIC in etherboot.nic-dev-id. -# For PCI NICs, this string is of the form "PCI:vvvv:dddd" where vvvv is the -# vendor identifier and dddd the device identifier, in lower-case ASCII hex. -# For ISA NICs, the format of the string is "ISA:..." where ... is not yet -# decided upon. -# -# We use the identifier to select the NBI image that will be specified via -# the "bootfile-name" option. -# -# PCI NICs - use PCI vendor and device IDs -# Listed in file generated by mknbi-set -# -include "/etc/dhcpd.conf.etherboot-pcimap.include"; - -# ISA NICs -# -if substring ( option vendor-class-identifier, 0, 9 ) = "Etherboot" { - if exists etherboot.nic-dev-id { - - } -} diff --git a/gpxe/contrib/initrd/include-modules b/gpxe/contrib/initrd/include-modules deleted file mode 100755 index 60e76fc6..00000000 --- a/gpxe/contrib/initrd/include-modules +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/perl -w -# -# Retrieve modules required for an initrd image -# $Id$ - -unless ( @ARGV ) { - die "Syntax: $0 [ -d target_directory ] module_1 module_2 module_3\n" -} - -# Parse command line arguments -my @requested_modules = (); -my $target_dir = ""; -my $kernel_ver; -my $quiet; -chomp ( my $current_kernel_ver = `uname -r` ); -while ( $_ = shift ) { - if ( /-d/ ) { $target_dir = shift } - elsif ( /-k/ ) { $kernel_ver = shift } - elsif ( /-q/ ) { $quiet = 1 } - else { push @requested_modules, $_ }; -} - -# Create target directory if required -if ( $target_dir ) { - print STDERR "Target directory is $target_dir\n" unless $quiet; - system ( "mkdir -p $target_dir" ); - chdir $target_dir; -} - -# Use modprobe -nav to retrieve locations of modules and their dependencies -print STDERR "Requested modules ". join (' ', @requested_modules)."\n" unless $quiet; -my @modules_dups; -foreach my $module ( @requested_modules ) { - my @module_list = map { /^\S+\s+(.*)$/ ; $1 } `/sbin/modprobe -nva $module`; - die "Cannot find any modules matching $module\n" unless @module_list; - push @modules_dups, @module_list; -} - -# Remove duplicates from list -my %module_basenames = (); -my @modules = (); -foreach my $module ( @modules_dups ) { - # Ugly hack : assume that dependencies are independent of kernel version - # This seems to be necessary because we can't run modprobe and specify - # an alternate modules.dep file; it refuses to understand lines of the - # form "depfile=XXX" as documented in modules.conf(5) - $module =~ s/$current_kernel_ver/$kernel_ver/ if $kernel_ver; - push @modules, $module unless $module_basenames{$module}; - ( my $basename ) = ( $module =~ /([^\/]+)\.o/ ); - $module_basenames{$module} = $basename; -} - -# Process module list -print "#!/bin/sh\n"; -foreach my $module ( @modules ) { - my $basename = $module_basenames{$module}; - # Report via stdout - print STDERR "Using module $basename from $module\n" unless $quiet; - # Copy uncompressed module to current directory - system ("gunzip -c $module > $basename.o"); - # Print insmod line to stdout - print "insmod $basename\n"; -} diff --git a/gpxe/contrib/initrd/linux-wlan.cfg b/gpxe/contrib/initrd/linux-wlan.cfg deleted file mode 100644 index 7df4a059..00000000 --- a/gpxe/contrib/initrd/linux-wlan.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Dummy config file for building only wlanctl -# $Id$ - -PRISM2_PLX=n -PRISM2_PCMCIA=n -PRISM2_PCI=n -PRISM2_USB=n diff --git a/gpxe/contrib/initrd/linuxrc b/gpxe/contrib/initrd/linuxrc deleted file mode 100644 index 24bdb0df..00000000 --- a/gpxe/contrib/initrd/linuxrc +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# $Id$ - -PATH=/sbin:/bin - -echo Busybox /linuxrc starting - -echo Mounting /proc filesystem -mount -t proc none /proc - -echo=echo -if grep '\bquiet\b' /proc/cmdline > /dev/null; then - echo=true - quiet=1 -fi - -$echo Creating root device -mknod /dev/root b 1 0 2>/dev/null -chmod 700 /dev/root -echo 0x100 > /proc/sys/kernel/real-root-dev - -$echo Inserting modules -if [ -z "$quiet" ]; then - /bin/insert-modules -else - /bin/insert-modules >/dev/null -fi - -$echo Bringing up loopback interface -ifconfig lo 127.0.0.1 up -route add -net 127.0.0.0 netmask 255.0.0.0 lo - -# Hack required for prism2 cards -# It is not yet possible to use iwconfig to configure these cards, -# so we need wlanctl. -if ifconfig wlan0 down 2> /dev/null; then - $echo Setting up wireless link - wlanctl wlan0 lnxreq_ifstate ifstate=enable - wlanctl wlan0 lnxreq_autojoin ssid= authtype=opensystem -fi - -$echo Obtaining IP address via DHCP -$echo Trying to obtain IP address via wired link [eth0] -if udhcpc -i eth0 -f -n -q -s /bin/udhcpc-post; then - $echo Successfully obtained IP address via wired link [eth0] -else - $echo Failed to obtain IP address via wired link [eth0] - $echo Trying to obtain IP address via wireless link [wlan0] - udhcpc -i wlan0 -f -n -q -s /bin/udhcpc-post -fi - -if [ -d /sysroot/initrd ]; then - $echo Unmounting /proc prior to pivot_root - umount /proc - - $echo Pivoting root to /sysroot - pivot_root /sysroot /sysroot/initrd - cd / - - $echo Remounting devfs at correct place - mount -t devfs none /dev - - $echo Releasing locks on old devfs - exec 0</dev/null - exec 1>/dev/console - exec 2>/dev/console - - $echo Unmounting old devfs - umount /initrd/dev -else - # Failed to mount root: report error and hang - echo FATAL ERROR: Failed to mount root filesystem - echo Press Alt-SysRq-B or hit the reset switch to reboot - while : ; do sleep 6000 ; done -fi - diff --git a/gpxe/contrib/initrd/mkinitrd-net b/gpxe/contrib/initrd/mkinitrd-net deleted file mode 100755 index 0c95ebd1..00000000 --- a/gpxe/contrib/initrd/mkinitrd-net +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/sh -# -# $Id$ -# initrd builder for network booting - -# Utility function to determine whether or not a filesystem is usable for -# loopback mounts. Lifted verbatim from Erik Troan's mkinitrd script. -# -is_good_fs() { - local parttype= tmpname= - local dir=$1 - [[ -d $dir ]] || return 1 - [[ -w $dir ]] || return 1 - [[ $dir == */ ]] && dir=${dir%/} - parttype=$(awk "{if (\$2 == \""$dir"\") print \$3 }" /proc/mounts) - - while tmpname=${dir%/*} && [[ -z $parttype ]];do - [[ -z $tmpname ]] && tmpname=/ - parttype=$(awk "{if (\$2 == \""$tmpname"\") print \$3 }" /proc/mounts) - dir=$tmpname - done - - case $parttype in - nfs|tmpfs) return 1;; - *) return 0; - esac -} - -# Find a suitable temporary directory (i.e. not tmpfs or nfs) -if is_good_fs $TMPDIR; then - tmpdir=$TMPDIR -elif is_good_fs /tmp; then - tmpdir=/tmp -elif is_good_fs /var/tmp; then - tmpdir=/var/tmp -elif is_good_fs /root/tmp; then - tmpdir=/root/tmp -else - echo "Cannot use a tmp directory" >&2 - exit 1 -fi - -# Default settings (some can be overridden by command-line options) -include_modules=include-modules -initrd_skel=/usr/lib/mkinitrd-net/initrd-skel -kernel_ver=`uname -r` -use_sudo=y -keep=n -output_dir=/var/lib/tftpboot -make_link=y -quiet= - -# No need to use sudo if we are root -if [ $UID -eq 0 ]; then - use_sudo=n -fi - -USAGE="Usage: $0 [-k|--kernel <kernel_ver>] [-n|--nolink] [-q|--quiet] [-l|--local] [--nosudo] [--keep] [--help] module_list ..." - -# Parse command-line options -while [ $# -gt 0 ]; do - case "$1" in - -l|--local) - shift - use_local=y ;; - -k|--kernel) - shift - kernel_ver=$1 - shift ;; - --nosudo) shift ; use_sudo=n ;; - --keep) shift ; keep=y ;; - --n|--nolink) - shift ; make_link=n ;; - -q|--quiet) shift ; quiet=-q ;; - --help) shift ; do_help=y ;; - --) shift ; break ;; - -*) echo "${0}: ${1}: invalid option" >&2 - echo $USAGE >& 2 - exit 2 ;; - *) break ;; - esac -done - -# Build list of requested modules -modules="$*" -requested_modules="$modules" -modules="$modules nfs" # Always require nfs for nfs mount -modules="$modules af_packet" # Always require af_packet for udhcpc - -# --help => Print help message -if [ "$do_help" == "y" ]; then - echo $USAGE - echo " -k, --kernel Specify kernel version" - echo " -n, --nolink Do not create a matching symbolic link" - echo " -l, --local Run locally from CVS (for developers only)" - echo " --nosudo Do not use sudo (i.e. must run as root instead)" - echo " --keep Keep temporary files instead of deleting them" - exit 0; -fi - -# --local => we are running directly from CVS, rather than -# from an installed copy, so use local files and directories -if [ "$use_local" == "y" ]; then - include_modules=./include-modules - initrd_skel=initrd-skel - output_dir=tftpboot -fi - -# If use_sudo is set, check that sudo exists -sudo=/usr/bin/sudo -if [ "$use_sudo" == "y" ]; then - if [ ! -x $sudo ]; then - use_sudo=n - echo "WARNING: --nosudo not specified but $sudo not found" - fi -fi -if [ "$use_sudo" == "n" ]; then - sudo= -fi - -# Create temporary working files -initrd=`mktemp -d ${tmpdir}/initrd.XXXXXX` -initrdimg=`mktemp ${tmpdir}/initrd.img.XXXXXX` -initrdmnt=`mktemp -d ${tmpdir}/initrd.mnt.XXXXXX` - -# Copy skeleton into temporary area -cp -a $initrd_skel/* $initrd/ -mkdir -p $initrd/lib/modules/$kernel_ver -$include_modules $quiet -k $kernel_ver -d $initrd/lib/modules/$kernel_ver $modules > $initrd/bin/insert-modules || exit 1 -chmod 755 $initrd/bin/insert-modules - -# Create empty ext2fs image file -dd if=/dev/zero bs=1k of=$initrdimg count=$((`du -sk $initrd | cut -f1` * 7 / 6)) 2> /dev/null -/sbin/mke2fs -q -F $initrdimg 2> /dev/null - -# Mount image file, copy files on, create /dev entries, display free space, umount -$sudo mount -o loop $initrdimg $initrdmnt -cp -a $initrd/* $initrdmnt/ -$sudo mknod $initrdmnt/dev/console c 5 1 -$sudo mknod $initrdmnt/dev/null c 1 3 -$sudo mknod $initrdmnt/dev/ram b 1 1 -$sudo mknod $initrdmnt/dev/systty c 4 0 -for i in 1 2 3 4; do $sudo mknod $initrdmnt/dev/tty$i c 4 $i; done -if [ "$quiet" == "n" ]; then - df -h $initrdmnt -fi -$sudo umount $initrdmnt - -# Create output file -initrd_suffix=`echo $requested_modules | tr " " .` -gzip -9 -n -c $initrdimg > $output_dir/initrd-$initrd_suffix.$kernel_ver.img - -# Create symlink -if [ "$make_link" == "y" ]; then - link=$output_dir/initrd-$initrd_suffix.img - [ -L $link ] && rm -f $link - ln -s initrd-$initrd_suffix.$kernel_ver.img $link -fi - -# Remove temporary files -if [ "$keep" == "n" ]; then - rm -rf $initrd - rm -f $initrdimg - rmdir $initrdmnt -fi diff --git a/gpxe/contrib/initrd/mkinitrd-net.spec b/gpxe/contrib/initrd/mkinitrd-net.spec deleted file mode 100644 index 94f5d9db..00000000 --- a/gpxe/contrib/initrd/mkinitrd-net.spec +++ /dev/null @@ -1,112 +0,0 @@ -%define name mkinitrd-net -%define version 1.10 -%define release 1fs - -Summary: Network-booting initrd builder -Name: %{name} -Version: %{version} -Release: %{release} -Source0: %{name}-%{version}.tar.bz2 -Source1: http://belnet.dl.sourceforge.net/sourceforge/etherboot/mknbi-1.2.tar.bz2 -Source2: http://www.busybox.net/downloads/busybox-0.60.3.tar.bz2 -Source3: http://www.uclibc.org/downloads/uClibc-0.9.11.tar.bz2 -Source4: ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-0.1.13.tar.bz2 -Source5: http://udhcp.busybox.net/source/udhcp-0.9.7.tar.bz2 -Copyright: GPL/LGPL/MPL -Group: System/Kernel and hardware -BuildRoot: %{_tmppath}/%{name}-buildroot -Prefix: %{_prefix} -Requires: tftp-server - -%description -mkinitrd-net allows you to build initial ramdisk images (initrds) suitable -for use with Etherboot and other network-booting software. This package -contains two main utilities: mkinitrd-net (to build an initrd containing a -specified set of network-card modules) and mknbi (to generate -Etherboot-usable NBI images from a given kernel and initrd). It also -contains a helper script mknbi-set which will maintain sets of initrds to -match all your currently-installed kernels. - -mkinitrd-net uses code from the uClibc, busybox, udhcp and Etherboot -projects. - -%prep -%setup -n initrd -a1 -a2 -a3 -a4 -a5 - -%build -%make LIBDIR=%{_libdir}/mknbi - -%install -rm -rf $RPM_BUILD_ROOT -%makeinstall tftpbootdir=$RPM_BUILD_ROOT%{_localstatedir}/tftpboot -touch $RPM_BUILD_ROOT%{_sysconfdir}/dhcpd.conf.etherboot-pcimap.include -ln -s %{_localstatedir}/tftpboot $RPM_BUILD_ROOT/tftpboot - -%clean -rm -rf $RPM_BUILD_ROOT - -%post -%{_bindir}/mknbi-set - -%triggerin -- kernel kernel-smp kernel-secure kernel-enterprise -%{_bindir}/mknbi-set - -%files -%defattr(-,root,root) -%config(noreplace) %{_sysconfdir}/mknbi-set.conf -%config(noreplace) %{_sysconfdir}/dhcpd.conf.etherboot.include -%ghost %{_sysconfdir}/dhcpd.conf.etherboot-pcimap.include -%{_bindir}/mknbi-* -%{_bindir}/mkelf-* -%{_bindir}/dis* -%{_bindir}/mkinitrd-net -%{_bindir}/include-modules -%{_libdir}/mknbi -%{_libdir}/mkinitrd-net -%{_mandir}/man*/* -/tftpboot -%{_localstatedir}/tftpboot -%doc README -%doc AUTHORS.busybox LICENSE.busybox -%doc AUTHORS.udhcpc COPYING.udhcpc -%doc COPYING.wlanctl LICENSE.wlanctl THANKS.wlanctl -%doc COPYING.uClibc -%docdir %{_docdir}/mknbi* -%{_docdir}/mknbi* - -%changelog -* Fri Jul 26 2002 Michael Brown <mbrown@fensystems.co.uk> 1.10-1fs -- Support for new binary etherboot.nic-dev-id structure -- Added --kernel option patch from Stew Benedict at MandrakeSoft -- Only try to use sudo if we are not already root - -* Wed Jun 05 2002 Michael Brown <mbrown@fensystems.co.uk> 1.9-1fs -- Modifications to allow DHCP, TFTP and NFS servers to be separate machines. - -* Thu May 30 2002 Michael Brown <mbrown@fensystems.co.uk> 1.8-1fs -- /tftpboot symlinked to /var/lib/tftpboot -- Has ability to be quiet if "quiet" specified on kernel cmdline - -* Sun May 26 2002 Michael Brown <mbrown@fensystems.co.uk> 1.7-1fs -- PCI-ID auto-mapping via dhcpd.conf.etherboot-pcimap.include - -* Fri May 24 2002 Michael Brown <mbrown@fensystems.co.uk> 1.6-1fs -- Bugfixes, migrated /tftpboot to /var/lib/tftpboot - -* Thu May 23 2002 Michael Brown <mbrown@fensystems.co.uk> 1.5-1fs -- Now includes dhcpd.conf.etherboot.include -- Automatically scans for all network modules in the pcimap file - -* Wed May 08 2002 Michael Brown <mbrown@fensystems.co.uk> 1.4-1fs -- Bugfixes: tmpdir selection, linuxrc typos, ifconfig peculiarities - -* Sat May 04 2002 Michael Brown <mbrown@fensystems.co.uk> 1.3-1fs -- During %make, LIBDIR must be set for mknbi -- Added %post scriptlet since %trigger seems not to be being triggered... - -* Sat May 04 2002 Michael Brown <mbrown@fensystems.co.uk> 1.2-1fs -- Added extra sources instead of requiring "make" to download them - -* Sat May 04 2002 Michael Brown <mbrown@fensystems.co.uk> 1.1-1fs -- First attempt at an RPM package - diff --git a/gpxe/contrib/initrd/mknbi-set b/gpxe/contrib/initrd/mknbi-set deleted file mode 100755 index e61acac9..00000000 --- a/gpxe/contrib/initrd/mknbi-set +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/perl -w -# -# $Id$ -# Maintains set of NBIs based on currently-installed kernels -# Network card module sets are taken from /etc/mknbi-set.conf - -use strict; -use vars qw($verbosity); - -use constant EB_PCI_DEVICE => 1; - -# Utility function: calculate output id given a kernel file name and -# space-separated list of modules -sub calc_output_id ($$) { - my $kernel = shift; - my $moduleset = shift; - my $kernel_ver = ""; - ( $kernel_ver ) = ( $kernel =~ /vmlinuz-(.*)$/ ); - ( my $output_id = "$moduleset".( $kernel_ver ? ".$kernel_ver" : "" ) ) =~ tr/,/./; - return ( $kernel_ver, $output_id ); -} - -# Utility function: read modules.pcimap-style file -# Add modules to modulesets hash, write out dhcpd.conf fragment -sub read_config_file ($$$$) { - my $configfile = shift; - my $modulesets = shift; - my $dhcpfh = shift; - my $alwaysuse = shift; - - print "Scanning through $configfile for network modules...\n" if $verbosity >= 1; - open CF, $configfile or die "Could not open $configfile: $!\n"; - chomp ( my $tempmodule = `mktemp /tmp/mknbi-set.XXXXXX` ); - chomp ( my $cwd = `pwd` ); chdir '/'; # Modprobe searches the current directory... - print $dhcpfh " \# Generated from $configfile\n"; - while (<CF>) { - chomp; - next if /^[\#;]/ or /^\s*$/; - ( my $module, undef, my $vendor, my $device ) = /^(\S+)(\s+(\S+)\s+(\S+))?/ ; - $modulesets->{$module} = 1 if $alwaysuse; - if ( ! exists $modulesets->{$module} ) { - # Check to see if module is a network module - # Only do this the first time we encounter a module - my @modulepaths = `/sbin/modprobe -l $module.o*` ; - chomp ( my $modulepath = $modulepaths[0] ); - if ( $modulepath ) { - if ( $modulepath =~ /.o.gz$/ ) { - system ( "zcat $modulepath > $tempmodule" ); - } else { - system ( "cp $modulepath $tempmodule" ); - } - $modulesets->{$module} = 0; - foreach ( `nm $tempmodule` ) { - chomp; - $modulesets->{$module} = 1 if /(ether|wlan)/ ; - } - unlink $tempmodule; - } else { - print STDERR "Cannot locate module $module specified in $configfile\n"; - } - } - if ( $modulesets->{$module} ) { - if ( $vendor ) { - print "$module ($vendor,$device) listed in $configfile\n" if $verbosity >= 2; - printf $dhcpfh ( " if option etherboot.nic-dev-id = %02x:%02x:%02x:%02x:%02x { option etherboot.kmod \"%s\"; }\n", - EB_PCI_DEVICE, - ( hex($vendor) >> 8 ) & 0xff, hex($vendor) & 0xff, - ( hex($device) >> 8 ) & 0xff, hex($device) & 0xff, - $module ); - } else { - print "$module (without PCI IDs) listed in $configfile\n" if $verbosity >= 2; - } - } - } - close CF; - print $dhcpfh "\n"; - chdir $cwd; -} - -my $conffile = '/etc/mknbi-set.conf'; -my $mkinitrd_net = 'mkinitrd-net'; -my $mknbi = 'mknbi-linux'; -my $output_dir = '/var/lib/tftpboot'; -my $dhcpfile = '/etc/dhcpd.conf.etherboot-pcimap.include'; -my $use_local; -our $verbosity = 1; -my $modulesets = {}; -my $kernel = ''; -my @kernels = (); - -my $usage="Usage: $0 [-l|--local] [-q] [-v] [-r|--refresh module[,module...]] [--help]"; - -# Parse command-line options -while ( $_ = shift ) { - if ( /-l|--local/ ) { - $conffile = 'mknbi-set.conf'; - $mkinitrd_net = './mkinitrd-net'; - $mknbi = './mknbi-linux --format=nbi --target=linux'; - $output_dir = 'tftpboot'; - $dhcpfile = 'tftpboot/dhcpd.conf.etherboot-pcimap.include'; - $use_local = 1; - } elsif ( /-r|--refresh/ ) { - my $moduleset = shift; - $modulesets->{$moduleset} = 1; - } elsif ( /-k|--kernel/ ) { - $kernel = shift; - } elsif ( /-v|--verbose/ ) { - $verbosity++; - } elsif ( /-q|--quiet/ ) { - $verbosity--; - } elsif ( /--help/ ) { - die "$usage\n". - " -k, --kernel Build NBIs for a particular kernel\n". - " -l, --local Run locally from CVS (for developers only)\n". - " -r, --refresh Refresh NBI for a particular module\n". - " -v, --verbose Be more verbose\n". - " -q, --quiet Be less verbose\n"; - } else { - die "$usage\n"; - } -} - -# Get set of current kernels -if ($kernel) { - @kernels = ( $kernel ); -} else { - @kernels = glob('/boot/vmlinuz*'); -} -die "Could not find any kernels in /boot\n" unless @kernels; - -# If modules have been specified via --refresh, do not scan for modules or rewrite the -# dhcpd.conf fragment file -unless ( %$modulesets ) { - # Write dhcpd.conf fragment file - open my $dhcpfh, ">$dhcpfile" or die "Could not open $dhcpfile for writing: $!\n"; - print $dhcpfh "# Etherboot PCI ID -> Linux kernel module mapping file\n"; - print $dhcpfh "# Generated by mknbi-set on ".(scalar localtime)."\n"; - print $dhcpfh "#\n"; - print $dhcpfh "if substring ( option vendor-class-identifier, 0, 9 ) = \"Etherboot\" {\n"; - print $dhcpfh " if exists etherboot.nic-dev-id {\n"; - print $dhcpfh " \# Legacy nic-dev-id mechanism: there are some DLink DFE538 cards in circulation that\n"; - print $dhcpfh " \# predated the change to the new nic-dev-id binary structure\n"; - print $dhcpfh " if option etherboot.nic-dev-id = \"PCI:1186:1300\" { option etherboot.kmod \"8139too\"; }\n"; - print $dhcpfh "\n"; - - # Get set of network modules to build NBIs for - # Read explicitly-specified module sets from $conffile - read_config_file($conffile, $modulesets, $dhcpfh, 1); - # Obtain list of all network modules from pcimap file - my $pcimap; - foreach ( `/sbin/modprobe -c` ) { - $pcimap = $1 if /^pcimap.*?=(.*)$/; - } - if ( $pcimap ) { - read_config_file($pcimap, $modulesets, $dhcpfh, 0); - } else { - print STDERR "Could not identify pcimap file\n"; - } - # Finish off dhcpd.conf fragment file - print $dhcpfh " }\n}\n"; - close $dhcpfh; -} - -# Build initrd and nbi for each kernel-moduleset combination -foreach my $moduleset ( sort keys %$modulesets ) { - next unless $modulesets->{$moduleset}; # Ignore if value is 0 - print "Building NBIs for module set $moduleset\n" if $verbosity >= 1; - foreach my $kernel ( @kernels ) { - ( my $kernel_ver, my $output_id ) = calc_output_id ( $kernel, $moduleset ); - if ( -l $kernel ) { - # Symbolic link; create matching symlink - my $real_kernel = readlink ( $kernel ); - ( my $real_kernel_ver, my $real_output_id ) = calc_output_id ( $real_kernel, $moduleset ); - print "Symlinking $output_id to $real_output_id\n" if $verbosity >= 2; - my $initrd_file = "$output_dir/initrd-$output_id.img"; - unlink ( $initrd_file ) if -l $initrd_file; - system ( "ln -s initrd-$real_output_id.img $initrd_file" ) == 0 or print STDERR "Could not symlink $initrd_file to initrd-$real_output_id.img: $!\n"; - my $nbi_file = "$output_dir/boot-$output_id.nbi"; - unlink ( $nbi_file ) if -l $nbi_file; - system ( "ln -s boot-$real_output_id.nbi $nbi_file" ) == 0 or print STDERR "Could not symlink $nbi_file to boot-$real_output_id.nbi: $!\n"; - } else { - # Real file: create initrd and nbi - print "Creating initrd and nbi for $output_id\n" if $verbosity >= 2; - ( my $moduleset_spaces = $moduleset ) =~ tr/,/ /; - my $initrd_cmd = "$mkinitrd_net --nolink ". - ( $use_local ? "--local " : "" ). - ( $kernel_ver ? "--kernel $kernel_ver " : "" ). - ( $verbosity >= 2 ? "" : "-q " ). - $moduleset_spaces; - print "$initrd_cmd\n" if $verbosity >= 3; - if ( system ( $initrd_cmd ) == 0 ) { - my $mknbi_cmd = "$mknbi $kernel $output_dir/initrd-$output_id.img > $output_dir/boot-$output_id.nbi"; - print "$mknbi_cmd\n" if $verbosity >= 3; - system ( $mknbi_cmd ) == 0 or print STDERR "mknbi failed: $!\n"; - } else { - print STDERR "$initrd_cmd failed: $!\n"; - } - } - } -} diff --git a/gpxe/contrib/initrd/mknbi-set.conf b/gpxe/contrib/initrd/mknbi-set.conf deleted file mode 100644 index f24846ca..00000000 --- a/gpxe/contrib/initrd/mknbi-set.conf +++ /dev/null @@ -1,27 +0,0 @@ -# This file specifies the network cards for which NBI images should be built -# Each line contains a list of kernel modules to be used, separated by commas -# You can optionally specify PCI vendor and device IDs that should be automatically -# mapped to this module. -# -# The format is similar to modutils' modules.pcimap file. -# -# Examples: -# RTL8139-based ethernet card -; 8139too -# RTL8139-based ethernet card with PCI IDs vendor=0x1186, device=0x1300 -; 8139too 0x1186 0x1300 -# RTL8139 and Prism2_pci in same image -; 8139too,prism2_pci - -# Some modules do not include the MODULE_DEVICE_TABLE macro, and so end up not -# being listed in the pcimap file. These modules are included here to force -# the creation of corresponding initrds. -prism2_pci 0x1260 0x3873 -prism2_plx 0x1638 0x1100 -prism2_plx 0x16ab 0x1101 -prism2_plx 0x16ab 0x1102 -prism2_plx 0x1385 0x4100 -prism2_plx 0x15e8 0x0130 -prism2_plx 0x16ec 0x3685 -prism2_plx 0x16ab 0x1102 -prism2_plx 0x15e8 0x0131 diff --git a/gpxe/contrib/initrd/script.c.patch b/gpxe/contrib/initrd/script.c.patch deleted file mode 100644 index 127b881c..00000000 --- a/gpxe/contrib/initrd/script.c.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- script.c.orig Tue Apr 2 23:49:33 2002 -+++ script.c Wed Jun 5 14:17:22 2002 -@@ -179,7 +179,7 @@ - } - if (packet->siaddr) { - envp[j] = malloc(sizeof("siaddr=255.255.255.255")); -- sprintip(envp[j++], "siaddr=", (unsigned char *) &packet->yiaddr); -+ sprintip(envp[j++], "siaddr=", (unsigned char *) &packet->siaddr); - } - if (!(over & FILE_FIELD) && packet->file[0]) { - /* watch out for invalid packets */ diff --git a/gpxe/contrib/initrd/udhcpc-post b/gpxe/contrib/initrd/udhcpc-post deleted file mode 100644 index 395d6c59..00000000 --- a/gpxe/contrib/initrd/udhcpc-post +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -# $Id$ - -if [ "$1" = "deconfig" ]; then - ifconfig $interface 0.0.0.0 up -else if [ "$1" = "bound" ] ; then - echo UDHCPC: I am $ip [$hostname], booting from $serverid - [ -n "$hostname" ] && echo $hostname > /proc/sys/kernel/hostname - [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" - [ -n "$subnet" ] && NETMASK="netmask $subnet" - ifconfig $interface $ip $BROADCAST $NETMASK - route add default gw $router dev $interface - echo -n > /etc/resolv.conf - for i in $dns; do - echo nameserver $i >> /etc/resolv.conf - done - [ -n "$siaddr" ] || siaddr=$serverid - [ -n "$rootpath" ] || rootpath=$siaddr:/ - echo Mounting root filesystem $rootpath at /sysroot - echo If this appears to hang, check that the server of $rootpath is able to - echo reverse-map my IP address $ip to obtain my hostname $hostname - mount -t nfs -o nolock,rsize=8192,wsize=8192 $rootpath /sysroot - fi -fi - diff --git a/gpxe/contrib/linux-2.0-transname.lsm b/gpxe/contrib/linux-2.0-transname.lsm deleted file mode 100644 index 4a590968..00000000 --- a/gpxe/contrib/linux-2.0-transname.lsm +++ /dev/null @@ -1,93 +0,0 @@ -Xref: news.nsw.CSIRO.AU comp.os.linux.announce:2827 -Path: news.nsw.CSIRO.AU!metro!metro!munnari.OZ.AU!news.ecn.uoknor.edu!news.wildstar.net!news.ececs.uc.edu!newsrelay.netins.net!newsfeed.dacom.co.kr!arclight.uoregon.edu!feed1.news.erols.com!howland.erols.net!newsfeed.internetmci.com!in3.uu.net!liw.clinet.fi!usenet -From: schoebel@informatik.uni-stuttgart.de (Thomas Schoebel-Theuer) -Newsgroups: comp.os.linux.announce -Subject: linux-2.0.21-transname - Patch for easier pool administration -Followup-To: comp.os.linux.misc -Date: 30 Oct 1996 10:53:38 GMT -Organization: Informatik, Uni Stuttgart, Germany -Lines: 76 -Approved: linux-announce@news.ornl.gov (Lars Wirzenius) -Message-ID: <pgpmoose.199610301253.4416@liw> -NNTP-Posting-Host: liw -X-Auth: PGPMoose V1.1 PGP comp.os.linux.announce - iQBVAwUBMnczrjiesvPHtqnBAQEO6gH/WRtFpTPyVtwi0cFVPZ1Xhn8cvfb6i3mk - LQY2kgpAPquP2TeXYWb5Ta3HxqK15pR1AgaEy5BmPS6+66ixZFvKRQ== - =hhea - ------BEGIN PGP SIGNED MESSAGE----- - -linux-2.0.21-transname.patch enables diskless clients, X-terminals etc to -mount the *root filesystem* of the server. This makes administration of -large pools *a lot* easier. - -Currently different diskless clients must have their root "/" on different -directories on the server, beause each client has _some_ different -configuration files. However, most administration files (typically about 99%) -have the same contents on the clients and on the server, but have to be -(and maintained separately) just because of the 1% differences. - -This duplication causes very large efforts in practice, since at least -the /etc directory has to be duplicated for every client. Even in /etc -many files are identical, for example sendmail.cf, initrc scripts and -others. Maintaining a large pool means to ensure coherence amoung the -duplicates. Classical methods like symlinks are unconvenient -for this task because they have to be valid in the view of mounted -filesystems at the client, not at the server. - -linux-2.0-transname.patch overcomes this problem by allowing filenames -to be context-dependend. For example, if you have a file "/etc/config" -that should differ on the hosts "myserver" and "myclient", you just -create two different files named "/etc/config#host=myserver#" and -"/etc/config#host=myclient#". On host "myserver", the file -"/etc/config#host=myserver#" will appear as if it were hardlinked to -file "/etc/config" (without the #...=...# suffix). On host "myclient", -the corresponding other file will appear as "/etc/config". So you -can access the right file contents under the same name, depending -on which host you are. - -As a result, you may use different contexts for e.g. /etc/fstab, but -have one shared /etc/passwd for all pool machines. So you don't need -yp or NYS any more. - -The kernel patch was developped for and is used at our Linux pool at the -University of Stuttgart with good results. Maintainance of the pool is -at a minimum, and adding new clients is a child's play. No worry with -keeping up mail configurations, newly installed tools, changed /etc/services, -/etc/shells, /etc/resolv.conf and many, many others. In contrast to a -sophisticated symlink solution, adding a new file to the /etc directory -is seen immediately by all clients. I never had less trouble with -administration before. - -I just uploaded the patch to - ftp://ftp.lmh.ox.ac.uk - where it should appear in /pub/linux-kernel-patch-archive/ -and also to - ftp://sunsite.unc.edu/pub/Linux/Incoming/ - where it should be moved to /pub/Linux/kernel/patches/misc/ soon. - -More details can be found in the README there, and also in the -configure-help. - -Enjoy, - -- -- Thomas - - ------BEGIN PGP SIGNATURE----- -Version: 2.6.3i -Charset: noconv - -iQCVAwUBMnczhYQRll5MupLRAQHzuwP9HGYa4I3bZpt22Y3oQIwEKZGfvnaS5AaD -fVG8wOQ/T7Nrant9JtTktsTVlxGVlYVnziRY4c0ew2qExapK9FqY/ItN0NJXy5aT -a4eSkn86rp6Un7m90RK1xVY5AyVAq49Rdw2StGxr7uj+davnmg3Np+U0MiAILq91 -52jKGaR3fvc= -=LSD6 ------END PGP SIGNATURE----- - --- -This article has been digitally signed by the moderator, using PGP. -http://www.iki.fi/liw/lars-public-key.asc has PGP key for validating signature. -Send submissions for comp.os.linux.announce to: linux-announce@news.ornl.gov -PLEASE remember a short description of the software and the LOCATION. -This group is archived at http://www.iki.fi/liw/linux/cola.html diff --git a/gpxe/contrib/linux-3c503-patch/3c503.patch b/gpxe/contrib/linux-3c503-patch/3c503.patch deleted file mode 100644 index b27ff1fc..00000000 --- a/gpxe/contrib/linux-3c503-patch/3c503.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -Naur linux.orig/drivers/net/3c503.c linux/drivers/net/3c503.c ---- linux.orig/drivers/net/3c503.c Thu Feb 19 23:14:04 1998 -+++ linux/drivers/net/3c503.c Thu Feb 19 23:16:24 1998 -@@ -179,7 +179,8 @@ - for both the old and new 3Com prefix */ - outb(ECNTRL_SAPROM|ECNTRL_THIN, ioaddr + 0x406); - vendor_id = inb(ioaddr)*0x10000 + inb(ioaddr + 1)*0x100 + inb(ioaddr + 2); -- if ((vendor_id != OLD_3COM_ID) && (vendor_id != NEW_3COM_ID)) { -+ if ((vendor_id != OLD_3COM_ID) && (vendor_id != NEW_3COM_ID) && -+ (vendor_id != BULL_3COM_ID)) { - /* Restore the register we frobbed. */ - outb(saved_406, ioaddr + 0x406); - return ENODEV; -diff -Naur linux.orig/drivers/net/3c503.h linux/drivers/net/3c503.h ---- linux.orig/drivers/net/3c503.h Thu Feb 19 23:14:05 1998 -+++ linux/drivers/net/3c503.h Mon Feb 16 11:41:56 1998 -@@ -11,6 +11,7 @@ - - #define OLD_3COM_ID 0x02608c - #define NEW_3COM_ID 0x0020af -+#define BULL_3COM_ID 0x000062 - - /* Shared memory management parameters. NB: The 8 bit cards have only - one bank (MB1) which serves both Tx and Rx packet space. The 16bit diff --git a/gpxe/contrib/linux-3c503-patch/README b/gpxe/contrib/linux-3c503-patch/README deleted file mode 100644 index 109094ff..00000000 --- a/gpxe/contrib/linux-3c503-patch/README +++ /dev/null @@ -1,7 +0,0 @@ -As part of determining whether a 3c503 is present, the Linux driver -examines the first 3 bytes of the ethernet address (the vendor ID) -to see if it corresponds to a known 3Com vendor ID. - -The Bull discless 386 workstation I have (don't laugh) has an -unknown vendor ID 0x000062. This trivial patch adds it to those -known to the driver. diff --git a/gpxe/contrib/mini-slamd/COPYING b/gpxe/contrib/mini-slamd/COPYING deleted file mode 100644 index a43ea212..00000000 --- a/gpxe/contrib/mini-slamd/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/gpxe/contrib/mini-slamd/Makefile b/gpxe/contrib/mini-slamd/Makefile deleted file mode 100644 index 05f1a366..00000000 --- a/gpxe/contrib/mini-slamd/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -CC=gcc -CFLAGS=-Wall -O2 - -mini-slamd: mini-slamd.c - $(CC) $(CFLAGS) -o $@ $< - -clean: - rm -f mini-slamd
\ No newline at end of file diff --git a/gpxe/contrib/mini-slamd/mini-slamd.c b/gpxe/contrib/mini-slamd/mini-slamd.c deleted file mode 100644 index 7c33e22b..00000000 --- a/gpxe/contrib/mini-slamd/mini-slamd.c +++ /dev/null @@ -1,521 +0,0 @@ -/* - * mini-slamd - * (c) 2002 Eric Biederman - */ - -#include <string.h> -#include <errno.h> -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/poll.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <netinet/ip.h> -#include <netinet/in.h> -#include <fcntl.h> -#include <unistd.h> -#include <arpa/inet.h> - -/* - * To specify the default interface for multicast packets use: - * route add -net 224.0.0.0 netmask 240.0.0.0 dev eth1 - * This server is stupid and does not override the default. - */ - -/* Sever states. - * - * Waiting for clients. - * Sending data to clients. - * Pinging clients for data. - * - */ -#define SLAM_PORT 10000 -#define SLAM_MULTICAST_IP ((239<<24)|(255<<16)|(1<<8)|(1<<0)) -#define SLAM_MULTICAST_PORT 10000 -#define SLAM_MULTICAST_TTL 1 -#define SLAM_MULTICAST_LOOPBACK 1 -#define SLAM_MAX_CLIENTS 10 - -#define SLAM_PING_TIMEOUT 100 /* ms */ - -/*** Packets Formats *** - * Data Packet: - * transaction - * total bytes - * block size - * packet # - * data - * - * Status Request Packet - * transaction - * total bytes - * block packets - * - * Status Packet - * received packets - * requested packets - * received packets - * requested packets - * ... - * received packets - * requested packtes - * 0 - */ - -#define MAX_HDR (7 + 7 + 7) /* transaction, total size, block size */ -#define MIN_HDR (1 + 1 + 1) /* transaction, total size, block size */ - -#define MAX_DATA_HDR (MAX_HDR + 7) /* header, packet # */ -#define MIN_DATA_HDR (MAX_HDR + 1) /* header, packet # */ - -/* ETH_MAX_MTU 1500 - sizeof(iphdr) 20 - sizeof(udphdr) 8 = 1472 */ -#define SLAM_MAX_NACK (1500 - (20 + 8)) -/* ETH_MAX_MTU 1500 - sizeof(iphdr) 20 - sizeof(udphdr) 8 - MAX_HDR = 1451 */ -#define SLAM_BLOCK_SIZE (1500 - (20 + 8 + MAX_HDR)) - - -/* Define how many debug messages you want - * 1 - sparse but useful - * 2 - everything - */ -#ifndef DEBUG -#define DEBUG 0 -#endif - -static int slam_encode( - unsigned char **ptr, unsigned char *end, unsigned long value) -{ - unsigned char *data = *ptr; - int bytes; - bytes = sizeof(value); - while ((bytes > 0) && ((0xff & (value >> ((bytes -1)<<3))) == 0)) { - bytes--; - } - if (bytes <= 0) { - bytes = 1; - } - if (data + bytes >= end) { - return -1; - } - if ((0xe0 & (value >> ((bytes -1)<<3))) == 0) { - /* packed together */ - *data = (bytes << 5) | (value >> ((bytes -1)<<3)); - } else { - bytes++; - *data = (bytes << 5); - } - bytes--; - data++; - while(bytes) { - *(data++) = 0xff & (value >> ((bytes -1)<<3)); - bytes--; - } - *ptr = data; - return 0; -} - -static unsigned long slam_decode(unsigned char **ptr, unsigned char *end, int *err) -{ - unsigned long value; - unsigned bytes; - if (*ptr >= end) { - *err = -1; - } - bytes = ((**ptr) >> 5) & 7; - if ((bytes == 0) || (bytes > sizeof(unsigned long))) { - *err = -1; - return 0; - } - if ((*ptr) + bytes >= end) { - *err = -1; - } - value = (**ptr) & 0x1f; - bytes--; - (*ptr)++; - while(bytes) { - value <<= 8; - value |= **ptr; - (*ptr)++; - bytes--; - } - return value; -} - - -static struct sockaddr_in client[SLAM_MAX_CLIENTS]; -static int clients; - - -void del_client(struct sockaddr_in *old) -{ - int i; - for(i = 0; i < clients; i++) { - if ((client[i].sin_family == old->sin_family) && - (client[i].sin_addr.s_addr == old->sin_addr.s_addr) && - (client[i].sin_port == old->sin_port)) { - memmove(&client[i], &client[i+1], - (clients - (i+1))*sizeof(client[0])); - clients--; - } - } -} - -void add_client(struct sockaddr_in *new) -{ - del_client(new); - if (clients >= SLAM_MAX_CLIENTS) - return; - memcpy(&client[clients], new, sizeof(*new)); - clients++; -} - -void push_client(struct sockaddr_in *new) -{ - del_client(new); - if (clients >= SLAM_MAX_CLIENTS) { - clients--; - } - memmove(&client[1], &client[0], clients*sizeof(*new)); - memcpy(&client[0], new, sizeof(*new)); - clients++; -} - - -void next_client(struct sockaddr_in *next) -{ - /* Find the next client we want to ping next */ - if (!clients) { - next->sin_family = AF_UNSPEC; - return; - } - /* Return the first client */ - memcpy(next, &client[0], sizeof(*next)); -} - -int main(int argc, char **argv) -{ - char *filename; - uint8_t nack_packet[SLAM_MAX_NACK]; - int nack_len; - uint8_t request_packet[MAX_HDR]; - int request_len; - uint8_t data_packet[MAX_DATA_HDR + SLAM_BLOCK_SIZE]; - int data_len; - uint8_t *ptr, *end; - struct sockaddr_in master_client; - struct sockaddr_in sa_src; - struct sockaddr_in sa_mcast; - uint8_t mcast_ttl; - uint8_t mcast_loop; - int sockfd, filefd; - int result; - struct pollfd fds[1]; - int state; -#define STATE_PINGING 1 -#define STATE_WAITING 2 -#define STATE_RECEIVING 3 -#define STATE_TRANSMITTING 4 - off_t size; - struct stat st; - uint64_t transaction; - unsigned long packet; - unsigned long packet_count; - unsigned slam_port, slam_multicast_port; - struct in_addr slam_multicast_ip; - - slam_port = SLAM_PORT; - slam_multicast_port = SLAM_MULTICAST_PORT; - slam_multicast_ip.s_addr = htonl(SLAM_MULTICAST_IP); - - if (argc != 2) { - fprintf(stderr, "Bad argument count\n"); - fprintf(stderr, "Usage: mini-slamd filename\n"); - exit(EXIT_FAILURE); - } - filename = argv[1]; - filefd = -1; - size = 0; - transaction = 0; - - /* Setup the udp socket */ - sockfd = socket(PF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) { - fprintf(stderr, "Cannot create socket\n"); - exit(EXIT_FAILURE); - } - memset(&sa_src, 0, sizeof(sa_src)); - sa_src.sin_family = AF_INET; - sa_src.sin_port = htons(slam_port); - sa_src.sin_addr.s_addr = INADDR_ANY; - - result = bind(sockfd, &sa_src, sizeof(sa_src)); - if (result < 0) { - fprintf(stderr, "Cannot bind socket to port %d\n", - ntohs(sa_src.sin_port)); - exit(EXIT_FAILURE); - } - - /* Setup the multicast transmission address */ - memset(&sa_mcast, 0, sizeof(sa_mcast)); - sa_mcast.sin_family = AF_INET; - sa_mcast.sin_port = htons(slam_multicast_port); - sa_mcast.sin_addr.s_addr = slam_multicast_ip.s_addr; - if (!IN_MULTICAST(ntohl(sa_mcast.sin_addr.s_addr))) { - fprintf(stderr, "Not a multicast ip\n"); - exit(EXIT_FAILURE); - } - - /* Set the multicast ttl */ - mcast_ttl = SLAM_MULTICAST_TTL; - setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, - &mcast_ttl, sizeof(mcast_ttl)); - - /* Set the multicast loopback status */ - mcast_loop = SLAM_MULTICAST_LOOPBACK; - setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &mcast_loop, sizeof(mcast_loop)); - - - state = STATE_WAITING; - packet = 0; - packet_count = 0; - fds[0].fd = sockfd; - fds[0].events = POLLIN; - fds[0].revents = 0; - for(;;) { - switch(state) { - case STATE_PINGING: - state = STATE_WAITING; - next_client(&master_client); - if (master_client.sin_family == AF_UNSPEC) { - break; - } -#if DEBUG - printf("Pinging %s:%d\n", - inet_ntoa(master_client.sin_addr), - ntohs(master_client.sin_port)); - fflush(stdout); -#endif - - /* Prepare the request packet, it is all header */ - ptr = request_packet; - end = &request_packet[sizeof(request_packet) -1]; - slam_encode(&ptr, end, transaction); - slam_encode(&ptr, end, size); - slam_encode(&ptr, end, SLAM_BLOCK_SIZE); - request_len = ptr - request_packet; - - result = sendto(sockfd, request_packet, request_len, 0, - &master_client, sizeof(master_client)); - /* Forget the client I just asked, when the reply - * comes in we will remember it again. - */ - del_client(&master_client); - break; - case STATE_WAITING: - { - int timeout; - int from_len; - timeout = -1; - if (master_client.sin_family != AF_UNSPEC) { - timeout = SLAM_PING_TIMEOUT; - } - result = poll(fds, sizeof(fds)/sizeof(fds[0]), timeout); - if (result == 0) { - /* On a timeout try the next client */ - state = STATE_PINGING; - break; - } - if (result > 0) { - from_len = sizeof(master_client); - result = recvfrom(sockfd, - nack_packet, sizeof(nack_packet), 0, - &master_client, &from_len); - if (result < 0) - break; - nack_len = result; -#if DEBUG - printf("Received Nack from %s:%d\n", - inet_ntoa(master_client.sin_addr), - ntohs(master_client.sin_port)); - fflush(stdout); -#endif -#if DEBUG - { - ptr = nack_packet; - end = ptr + result; - packet = 0; - result = 0; - while(ptr < end) { - packet += slam_decode(&ptr, end, &result); - if (result < 0) break; - packet_count = slam_decode(&ptr, end, &result); - if (result < 0) break; - printf("%d-%d ", - packet, packet + packet_count -1); - } - printf("\n"); - fflush(stdout); - } -#endif - /* Forget this client temporarily. - * If the packet appears good they will be - * readded. - */ - del_client(&master_client); - ptr = nack_packet; - end = ptr + nack_len; - result = 0; - packet = slam_decode(&ptr, end, &result); - if (result < 0) - break; - packet_count = slam_decode(&ptr, end, &result); - if (result < 0) - break; - /* We appear to have a good packet, keep - * this client. - */ - push_client(&master_client); - - /* Reopen the file to transmit */ - if (filefd != -1) { - close(filefd); - } - filefd = open(filename, O_RDONLY); - if (filefd < 0) { - fprintf(stderr, "Cannot open %s: %s\n", - filename, strerror(errno)); - break; - } - size = lseek(filefd, 0, SEEK_END); - if (size < 0) { - fprintf(stderr, "Seek failed on %s: %s\n", - filename, strerror(errno)); - break; - } - result = fstat(filefd, &st); - if (result < 0) { - fprintf(stderr, "Stat failed on %s: %s\n", - filename, strerror(errno)); - break; - } - transaction = st.st_mtime; - - state = STATE_TRANSMITTING; - break; - } - break; - } - case STATE_RECEIVING: - /* Now clear the queue of received packets */ - { - struct sockaddr_in from; - int from_len; - uint8_t dummy_packet[SLAM_MAX_NACK]; - state = STATE_TRANSMITTING; - result = poll(fds, sizeof(fds)/sizeof(fds[0]), 0); - if (result < 1) - break; - from_len = sizeof(from); - result = recvfrom(sockfd, - dummy_packet, sizeof(dummy_packet), 0, - &from, &from_len); - if (result <= 0) - break; -#if DEBUG - printf("Received Nack from %s:%d\n", - inet_ntoa(from.sin_addr), - ntohs(from.sin_port)); - fflush(stdout); -#endif - /* Receive packets until I don't get any more */ - state = STATE_RECEIVING; - /* Process a packet */ - if (dummy_packet[0] == '\0') { - /* If the first byte is null it is a disconnect - * packet. - */ - del_client(&from); - } - else { - /* Otherwise attempt to add the client. */ - add_client(&from); - } - break; - } - case STATE_TRANSMITTING: - { - off_t off; - off_t offset; - ssize_t bytes; - uint8_t *ptr2, *end2; - - /* After I transmit a packet check for packets to receive. */ - state = STATE_RECEIVING; - - /* Find the packet to transmit */ - offset = packet * SLAM_BLOCK_SIZE; - - /* Seek to the desired packet */ - off = lseek(filefd, offset, SEEK_SET); - if ((off < 0) || (off != offset)) { - fprintf(stderr, "Seek failed on %s:%s\n", - filename, strerror(errno)); - break; - } - /* Encode the packet header */ - ptr2 = data_packet; - end2 = data_packet + sizeof(data_packet); - slam_encode(&ptr2, end2, transaction); - slam_encode(&ptr2, end2, size); - slam_encode(&ptr2, end2, SLAM_BLOCK_SIZE); - slam_encode(&ptr2, end2, packet); - data_len = ptr2 - data_packet; - - /* Read in the data */ - bytes = read(filefd, &data_packet[data_len], - SLAM_BLOCK_SIZE); - if (bytes <= 0) { - fprintf(stderr, "Read failed on %s:%s\n", - filename, strerror(errno)); - break; - } - data_len += bytes; - /* Write out the data */ - result = sendto(sockfd, data_packet, data_len, 0, - &sa_mcast, sizeof(sa_mcast)); - if (result != data_len) { - fprintf(stderr, "Send failed %s\n", - strerror(errno)); - break; - } -#if DEBUG > 1 - printf("Transmitted: %d\n", packet); - fflush(stdout); -#endif - /* Compute the next packet */ - packet++; - packet_count--; - if (packet_count == 0) { - packet += slam_decode(&ptr, end, &result); - if (result >= 0) - packet_count = slam_decode(&ptr, end, &result); - if (result < 0) { - /* When a transmission is done close the file, - * so it may be updated. And then ping then start - * pinging clients to get the transmission started - * again. - */ - state = STATE_PINGING; - close(filefd); - filefd = -1; - break; - } - } - break; - } - } - } - return EXIT_SUCCESS; -} diff --git a/gpxe/contrib/mkQNXnbi/Makefile b/gpxe/contrib/mkQNXnbi/Makefile deleted file mode 100644 index 4f6c0f2a..00000000 --- a/gpxe/contrib/mkQNXnbi/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# Makefile for the mkQNXnbi filter - -all: mkQNXnbi - -mkQNXnbi: mkQNXnbi.o - -mkQNXnbi.o: mkQNXnbi.c - -clean: - rm -f mkQNXnbi *.o diff --git a/gpxe/contrib/mkQNXnbi/README b/gpxe/contrib/mkQNXnbi/README deleted file mode 100644 index 1522df31..00000000 --- a/gpxe/contrib/mkQNXnbi/README +++ /dev/null @@ -1,36 +0,0 @@ -mkQNXnbi is a quick hack to generate tagged images from QNX boot images. - -To boot a QNX client with Etherboot you have to consider the following: -1. You MUST have another QNX box running in the network to provide the - root filesystem and the license info to the client. QNX cannot use - e.g. NFS for its root filesystem, as it needs to load a valid license - from a file on the root fs before being able to start TCP/IP. This - would lead to a chicken-and-egg problem. -2. The Net task normally determines the size of its internal tables from - the actual number of licensed nodes. Since this information is not - available at boot time when booting from the network, you will have - to set the max. number of nodes as well as a valid netmap entry for - the node providing the root filesystem as an option to Net in the - build file. - See examples/ws.etherboot and fill in the <blanks>. -3. The client does not need a TCP/IP license in order to boot. -4. You can use the boot-server OS of your choice. If you choose to use - QNX as boot server, the server of course needs a TCP/IP run-time - license. In this case you have the option of creating the boot image - on-the-fly and use the macro $(netmap) instead of a hard-coded MAC - address. - See examples/ws.etherboot.on-the-fly and fill in the <blanks>. - A template bootptab for the QNX bootp server is placed in the - examples directory. -5. mkQNXnbi expects the QNX image to be supplied on stdin and generates - the tagged image to stdout. This can be overridden on the command line - using the options -i <input-file> and -o <output-file>. - -mkQNXnbi can be compiled using e.g. Linux/gcc or on QNX using Watcom C -(or gcc, if you have it - see http://w3c.teaser.fr/~jcmichot/) - -Bug-reports to <al@alarsen.net> - -2002-01-25 -Anders Larsen -<al@alarsen.net> diff --git a/gpxe/contrib/mkQNXnbi/examples/bootptab b/gpxe/contrib/mkQNXnbi/examples/bootptab deleted file mode 100644 index 2077fa94..00000000 --- a/gpxe/contrib/mkQNXnbi/examples/bootptab +++ /dev/null @@ -1,29 +0,0 @@ -# /etc/bootptab: database for QNX bootp server (/etc/bootpd) - -# First, we define a global entry which specifies the stuff every host uses. -global:\ - :hd=/boot:\ - :ht=ethernet:\ - :sm=<your netmask here>:\ - :bf=|cd /boot; buildqnx -b 0x10000 build/<your build-file here> | mkQNXnbi:\ - :hn: - -# node 2 uses the default build-file -node2:\ - :tc=global:\ - :ha=<your MAC here>:\ - :ip=<your IP address here>: - -# node 3 uses its own build-file -node3:\ - :tc=global:\ - :ha=<your MAC here>:\ - :ip=<your IP address here>:\ - :bf=|cd /boot; buildqnx -b 0x10000 build/<your build-file here> | mkQNXnbi: - -# node 4 uses a pre-built boot image -node3:\ - :tc=global:\ - :ha=<your MAC here>:\ - :ip=<your IP address here>:\ - :bf=images/<your image-file here>: diff --git a/gpxe/contrib/mkQNXnbi/examples/ws.etherboot b/gpxe/contrib/mkQNXnbi/examples/ws.etherboot deleted file mode 100644 index d8120bc8..00000000 --- a/gpxe/contrib/mkQNXnbi/examples/ws.etherboot +++ /dev/null @@ -1,22 +0,0 @@ -# /boot/build/ws.etherboot - -sys/boot -$ boot -v - -sys/Proc32 -$ Proc32 -l <target node number> - -sys/Slib32 -$ Slib32 - -sys/Slib16 -$ Slib16 - -/bin/Net -$ Net -n <highest QNX node number in network> -m "<node number of boot server> 1 <MAC of boot server node here>" - -/bin/Net.<network driver> -$ Net.<network driver> - -/bin/sinit -$ sinit -r //<node number of boot server>/ TERM=<your terminal emulation {QNX|qansi}> diff --git a/gpxe/contrib/mkQNXnbi/examples/ws.etherboot.on-the-fly b/gpxe/contrib/mkQNXnbi/examples/ws.etherboot.on-the-fly deleted file mode 100644 index 3058c450..00000000 --- a/gpxe/contrib/mkQNXnbi/examples/ws.etherboot.on-the-fly +++ /dev/null @@ -1,22 +0,0 @@ -# /boot/build/ws.etherboot.on-the-fly - -sys/boot -$ boot -v - -sys/Proc32 -$ Proc32 -l $(lnode) - -sys/Slib32 -$ Slib32 - -sys/Slib16 -$ Slib16 - -/bin/Net -$ Net -n <highest QNX node number in network> -m $(netmap) - -/bin/Net.<network driver> -$ Net.<network driver> - -/bin/sinit -$ sinit -r //$(bnode)/ TERM=<your terminal emulation {QNX|qansi}> diff --git a/gpxe/contrib/mkQNXnbi/mkQNXnbi.c b/gpxe/contrib/mkQNXnbi/mkQNXnbi.c deleted file mode 100644 index 2ec2dc4b..00000000 --- a/gpxe/contrib/mkQNXnbi/mkQNXnbi.c +++ /dev/null @@ -1,196 +0,0 @@ -//***************************************************************************** -// -// Purpose: Make a boot-image for EtherBoot -// -// -// Compiler: This source can be compiled with gcc and Watcom C -// -// -// Note: The QNX boot image can be build with any reasonable -// start address, e.g. 0x1000 (default) or 0x10000 -// (widespread Boot-Rom address) -// -// -// Author: Anders Larsen -// -// -// Copyright: (C) 1999 by -// -// Anders Larsen -// systems engineer -// Gutleuthausstr. 3 -// D-69469 Weinheim -// Germany -// phone: +49-6201-961717 -// fax: +49-6201-961718 -// e-mail: al@alarsen.net -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// -//----------------------------------------------------------------------------- -// -// Change Log: -// V0.2: Sun 1999-12-13 Anders Larsen <al@alarsen.net> -//***************************************************************************** - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> - - -// max. size of QNX OS boot image is 512K -#define MAXSIZE (512*1024) - -typedef unsigned short ushort_t; -typedef unsigned long ulong_t; - - -// global header of tagged image: -struct initial_t -{ - ulong_t magic; - ulong_t length; - ulong_t location; - ulong_t start; -}; - - -// header of each image: -struct header_t -{ - ulong_t flags; - ulong_t loadaddr; - ulong_t imgsize; - ulong_t memsize; -}; - - -// global header of the QNX EtherBoot image: -struct qnx_loader_t -{ - struct initial_t setup; - struct header_t qnx; -}; - - -// global header: -union -{ - struct qnx_loader_t h; - char filler[512]; -} header; - - -char buffer[MAXSIZE]; - - -int usage( char* const* argv ) -{ - fprintf( stderr, "%s - make a tagged boot image for EtherBoot\n", *argv ); - fprintf( stderr, "\nuse:\n" ); - fprintf( stderr, "%s [ -<option> ]*\n", *argv ); - fprintf( stderr, "\noptions:\n" ); - fprintf( stderr, " i <input file> : QNX boot file (default: stdin)\n" ); - fprintf( stderr, " o <output file> : tagged image file (default: stdout)\n" ); - fprintf( stderr, " v : be verbose\n" ); - return EXIT_FAILURE; -} - -#ifdef __USAGE -%C - make a tagged boot image for EtherBoot - -use: -%C [ -<option> ]* - -options: - i <input file> : QNX boot file (default: stdin) - o <output file> : tagged image file (default: stdout) - v : be verbose -#endif - - -int main( int argc, char* const* argv ) -{ - int ch, l; - int verbose = 0; - - while ( ( ch = getopt( argc, argv, "hi:o:v" ) ) != EOF ) - switch ( ch ) - { - case 'i': - if ( !freopen( optarg, "r", stdin ) ) - { - perror( "can't open input file" ); - return EXIT_FAILURE; - } - break; - - case 'o': - if ( !freopen( optarg, "w", stdout ) ) - { - perror( "can't create output file" ); - return EXIT_FAILURE; - } - break; - - case 'v': - verbose++; - break; - - case 'h': - default: - return usage( argv ); - } - if ( optind != argc ) - return usage( argv ); - - memset( &header, 0, sizeof header ); - header.h.setup.magic = 0x1b031336; // magic number - header.h.setup.length = 4; - header.h.setup.location = 0x93e00000; // just below the EtherBoot rom - header.h.setup.start = 0; // filled in dynamically - header.h.qnx.flags = 0x04000004; // single image only - header.h.qnx.loadaddr = 0; // filled in dynamically - header.h.qnx.imgsize = 0; // filled in dynamically - header.h.qnx.memsize = 0; // filled in dynamically - - // read the QNX image from stdin: - for ( ; ( l = fread( buffer + header.h.qnx.imgsize, 1, 1024, stdin ) ) > 0; - header.h.qnx.imgsize += l - ) - ; - header.h.qnx.memsize = header.h.qnx.imgsize; - - // fill in the real load-address of the QNX boot image: - header.h.setup.start = *(ushort_t*)&buffer[10] << 16; - header.h.qnx.loadaddr = *(ushort_t*)&buffer[10] << 4; - - // write the tagged image file to stdout: - fwrite( &header, 1, 512, stdout ); - fwrite( buffer, 1, header.h.qnx.imgsize, stdout ); - - if ( verbose ) - { - // print diagnostic information: - fprintf( stderr, "QNX image size: %d bytes (%dK), load addr: 0x%05X\n", - header.h.qnx.imgsize, - header.h.qnx.imgsize / 1024, - header.h.qnx.loadaddr - ); - } - return EXIT_SUCCESS; -} diff --git a/gpxe/contrib/mkffwnb/2.0.10/linuxrc b/gpxe/contrib/mkffwnb/2.0.10/linuxrc deleted file mode 100755 index 351679c7..00000000 --- a/gpxe/contrib/mkffwnb/2.0.10/linuxrc +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# -# floppyfw initfile -# -# nicked from: -# hal91's initfile (/linuxrc), the bootup script of the system -# - -VERSION=2.1.6 - -load_fsmod () { - case $1 in - /dev/hd*) - insmod ide-cd - insmod cdrom - ;; - esac - case $2 in - vfat) - echo vfat support is builtin - ;; - iso9660) - insmod isofs - ;; - esac -} - -# -/bin/busybox echo "Booting floppyfw" - -PATH="/bin:/sbin:/usr/bin:/usr/sbin" -#PATH="/bin" -TERM=linux -ignoreeof=10 -no_exit_on_failed_exec=yes -export PATH TERM ignoreeof -umask 022 - -/bin/busybox echo "mounting: proc" -/bin/busybox mount -t proc /proc /proc - -/bin/busybox echo "Generating links. (Thanks to busybox.lineo.com)" -/bin/busybox --install -s - -echo "Generated" - -# Modified by Gem, based on coyote distro, changes by Ken Yap -ROOTDEV=`sed -e 's/$/ /' -e 's/.*root=\([^ ]*\) .*/\1/' -e 's/,/ /g' -e 's:/dev/nfs:/dev/fd0:' /proc/cmdline` -set -- $ROOTDEV -# Backward compatibility with a single device argument -if [ $# -eq 1 ] -then - set -- $1 vfat -fi -while [ "$1" -a "$2" ] -do - echo "attempting to mount $1 ($2)" - load_fsmod $1 $2 - if mount -t $2 $1 /mnt/tmp - then - echo "mounted $1 on /mnt/tmp" - break - fi - shift; shift -done - -[ -f /mnt/tmp/floppyfw/floppyfw.ini ] && cat /mnt/tmp/floppyfw/floppyfw.ini \ -| tr -d '\015' >/floppyfw.ini - -[ -f /floppyfw.ini ] && chmod 777 /floppyfw.ini -[ -f /floppyfw.ini ] && exec /floppyfw.ini - -echo -echo "** floppyfw.ini failed.. starting a shell" -echo -exec sh diff --git a/gpxe/contrib/mkffwnb/Extendinitrd.pm b/gpxe/contrib/mkffwnb/Extendinitrd.pm deleted file mode 100644 index 3b919ad1..00000000 --- a/gpxe/contrib/mkffwnb/Extendinitrd.pm +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/perl -w - -sub status_system ($$) { - my ($command, $message) = @_; - - $status = system($command); - $status <<= 8; - if ($status < 0) { - print STDERR "$!\n"; - } - if ($status != 0) { - print STDERR "$message\n"; - } -} - -sub extendinitrd ($$) { - my ($initrd, $nblocks) = @_; - - if ($nblocks <= 1440) { - print STDERR "nblocks must be >= 1440\n"; - return (1); - } - (undef, $type, undef, $fnlen, undef) = split(' ', `file $initrd`, 5); - print "$type $fnlen\n"; - if ($type ne 'Minix' || $fnlen != 30) { - die "Can only handle Minix initrds with 30 char filenames\n"; - return (1); - } - status_system("dd if=/dev/zero of=newinitrd bs=1k count=$nblocks", "Cannot create new initrd\n"); - status_system("mkfs.minix -n 30 newinitrd $nblocks", "Cannot mkfs.minix new initrd\n"); - mkdir("initrd.from") || print STDERR "Cannot make temp mount point initrd.from\n"; - mkdir("initrd.to") || print STDERR "Cannot make temp mount point initrd.to\n"; - status_system("mount -o ro,loop $initrd initrd.from", "Cannot mount $initrd on initrd.from"); - status_system("mount -o loop newinitrd initrd.to", "Cannot mount newinitrd on initrd.to"); - status_system("cp -a initrd.from/* initrd.to/", "Cannot copy initrd to newinitrd"); - status_system("umount initrd.from", "Cannot umount initrd.from"); - status_system("umount initrd.to", "Cannot umount initrd.to"); - rmdir("initrd.from") || print STDERR "Cannot remove temp mount point initrd.from\n"; - rmdir("initrd.to") || print STDERR "Cannot remove temp mount point initrd.to\n"; - return (0); -} - -1; diff --git a/gpxe/contrib/mkffwnb/README b/gpxe/contrib/mkffwnb/README deleted file mode 100644 index 38df4769..00000000 --- a/gpxe/contrib/mkffwnb/README +++ /dev/null @@ -1,69 +0,0 @@ -This is a quick and dirty script to convert a floppyfw floppy -(http://www.zelow.no/floppyfw/) to a tagged image for booting with -Etherboot (http://etherboot.sourceforge.net/). The advantages of network -booting include: it's much faster loading from the network than from a -floppy disk, you can boot from any size floppy, and you are not limited -to the maximum of 1.44 MB of the physical floppy. If you have enough RAM -and use a virtual floppy to build the initial boot image, you can put as -much on it as will fit the ramdisk. - -See further down under -nonet if you want to boot from HD or CDROM. - -This program requires mtools, tar, bzip2, loopback mount in the kernel, -and root privileges to execute. Hope you have them. - -This script works for any of the releases for which a subdirectory of -that name is provided, but it should not be too hard to make it work for -other releases, all that is done here is to substitute some scripts for -the distributed ones. - -First of all you should make the floppy work the way you want before -converting it to a tagged image. This involves editing the various -config files on the floppy. Instructions on this are distributed from -the floppyfw web page mentioned above. - -Edit the $tftpdir assignment for the directory where you put your tagged -images. Edit the $libdir assignment and the use lib directive near the -top if you decide to put this package somewhere other than -/usr/local/lib/mkffwnb/. Adjust the instructions below as necessary. - -Copy everything to $libdir. - - mkdir -p /usr/local/lib/mkffwnb/ - cp -a . /usr/local/lib/mkffwnb/ - -Make a link from /usr/local/lib/mkffwnb/mkffwnb.pl to -/usr/local/bin/mkffwnb so that it's in your path. - - ln -s /usr/local/lib/mkffwnb/mkffwnb.pl /usr/local/bin/mkffwnb - -Then run it as: - - mkffwnb - -You can also provide a floppy drive as an argument, e.g. - - mkffwnb x: - -where x: could be mapped to a disk file. This allows you to build an -image without a real floppy drive. Remember that for virtual drives root -must have the mapping for the drive in question in ~root/.mtoolsrc. - -You can use the option --localtime=/etc/localtime to specify that the -file /etc/localtime is to be copied to /etc/localtime on the initrd. -Instead of /etc/localtime, you can use any of the timezone files under -/usr/share/zoneinfo/, it's just that /etc/localtime will usually be the -correct one for your timezone. - -If you use the option -nonet, it leaves the intermediate files in -$tempdir, /tmp/mkffwnb by default. This is useful if you want the -vmlinuz and initrd.gz files for use with LILO or isolinux to boot from -HD or CDROM. Actually you can also use these with a floppy, it loads -faster if you fold all the scripts and modules into the initrd ahead -of time. - -mkffwnb has to be run as root because it uses loopback mounts and also -because the files inside the initrd are owned by root. - -Ken Yap -2003-04-20 diff --git a/gpxe/contrib/mkffwnb/mkffwnb.pl b/gpxe/contrib/mkffwnb/mkffwnb.pl deleted file mode 100755 index 555ec3ca..00000000 --- a/gpxe/contrib/mkffwnb/mkffwnb.pl +++ /dev/null @@ -1,226 +0,0 @@ -#!/usr/bin/perl -w -# -# Perl script to make a bootable image from a floppyfw floppy -# The basic idea is to unpack and replace or convert all -# the necessary config files into the initrd -# and then make a bootable image out of it -# -# The --format= option overrides the default of nbi or elf hardcoded -# in the source. Valid arguments are nbi or elf. -# -# The --output= options specifies an output file instead of stdout -# The --nonet option specifies that a netbootable image is not to -# be built but the vmlinuz and initrd.gz files left behind in $tempdir -# The --localtime=f option specifies a timezone file that's to be -# copied to /etc/localtime in the initrd, allowing a different timezone. -# The --ffw29 option is intended for 2.9.x and above and extends -# the size of the initrd by making a bigger one and copying the original over. -# -# The first non-option argument is taken to be the letter of a floppy to -# convert, e.g. a:, b: or even x: where x: is mapped to a file using -# mtools mapping in $HOME/.mtoolsrc. See the mtools documentation. -# Thus you can work on a floppy image in a disk file and only write -# to a floppy with dd or cp when you need to test the image. - -use Getopt::Long; - -use lib '/usr/local/lib/mkffwnb/'; -use Extendinitrd; - -use strict; - -use vars qw($testing $verbose $localtime $nonet $format $ffw29 $imagefile - $floppy $libdir $tftpdir $output $tempdir $tempmount); - -sub findversion () { - my ($version) = grep(/FloppyFW/, `mtype $imagefile ${floppy}floppyfw.msg`); - return '' unless defined($version) and $version ne ''; - chomp($version); - $version =~ s/.*FloppyFW (\d+\.\d+\.\d+(\.\d+)?).*/$1/; - return ($version); -} - -sub getappendargs () { - my ($append) = join(' ', grep(/^\s*(append\s|console=)/, `mtype $imagefile ${floppy}syslinux.cfg`)); - chomp ($append); - my @args = split(/\s+/, $append); - my @result = (); - foreach $_ (@args) { - next if (/^$/ or /^append/ or /^initrd=/); - next if (!$ffw29 and /^root=/); - push (@result, $_); - } - return (join(' ', @result)); -} - -# Copy whole floppy to the current directory -# m preserves timestamps, n overwrites without warning and / means recursive -sub mcopy ($) { - my ($tempdir) = @_; - - print "mcopy $imagefile -mn/ ${floppy}* $tempdir\n"; - my $status = system("mcopy -mn/ $imagefile ${floppy}* $tempdir"); - return ($status / 256); -} - -# Gunzip file, -f forces overwriting of uncompressed file -sub gunzip ($) { - my ($file) = @_; - - print "Gunzipping $file\n" if ($verbose); - my $status = system('gunzip', '-f', $file); - return ($status / 256); -} - -# Gzip file, -f forces overwriting of compressed file -sub gzip ($) { - my ($file) = @_; - - print "Gzipping $file\n" if ($verbose); - my $status = system('gzip', '-9', '-f', $file); - return ($status / 256); -} - -sub loopbackmount ($$) { - my ($file, $point) = @_; - - print "Mounting $file on $point loopback\n" if ($verbose); - my $status = system('mount', '-o', 'loop', $file, $point); - return ($testing ? 0 : $status / 256); -} - -sub loopbackumount ($) { - my ($point) = @_; - - print "Umounting $point\n" if ($verbose); - my $status = system('umount', $point); - return ($testing ? 0 : $status / 256); -} - -# Convert DOS CR-NL to Unix NL. $dst has implied prefix of $tempmount -# Use @output for temporary storage in case we write back to the same file -sub dostounix ($$) { - my ($src, $dst) = @_; - my @output = (); - - $dst = "$tempmount/$dst"; - print "Converting $src to $dst\n" if ($verbose); - unless (open(S, $src)) { - print "$src: $!\n"; - return (0); - } - while (<S>) { - chomp; - tr /\015//d; - push(@output, $_); - } - close(S); - open(D, ">$dst") or return; - for $_ (@output) { - print D "$_\n"; - } - close(D); - chmod(0755, $dst); - return (1); -} - -sub bunzip2untar ($$) { - my ($file, $dir) = @_; - - print "Unpacking $file into $dir\n" if ($verbose); - system("bunzip2 < $file | (cd $dir; tar xf -)"); -} - -$testing = $< != 0; -$verbose = 1; -$format = ''; -$imagefile = ''; -GetOptions('output=s' => \$output, - 'nonet!' => \$nonet, - 'localtime=s' => \$localtime, - 'format=s' => \$format, - 'ffw29!' => \$ffw29, - 'ffw30!' => \$ffw29, - 'i=s' => \$imagefile); -if (defined($output) and $output !~ m(^/)) { - my $d = `pwd`; - chomp($d); - $output = "$d/$output"; -} -if ($imagefile) { - $imagefile = "-i $imagefile"; -} -$libdir = '/usr/local/lib/mkffwnb'; -$tftpdir = '/usr/local/var/tftpboot'; -# default can also be 'elf' -$format = 'nbi' if ($format ne 'elf' and $format ne 'nbi'); -$floppy = $#ARGV >= 0 ? $ARGV[0] : 'a:'; -print <<EOF; -This program requires mtools, tar, bzip2, loopback mount in the kernel, -and root privileges to execute. Hope you have them. -EOF -my $version = &findversion(); -$version ne '' or die "Cannot determine version\n"; -print "Version $version\n"; -my $append = &getappendargs(); -$append = "--append='$append'" if $append ne ''; -print "$append\n"; -$libdir .= '/' . $version; --d $libdir or die "Cannot find files for $version\n"; -$tempdir = $nonet ? '/tmp/mkffwnb' : "/tmp/mkffwnb$$"; -$tempmount = 'tmpmount'; -mkdir($tempdir, 0755); -print "Copying files off floppy, please be patient...\n"; -&mcopy($tempdir) == 0 or die "Mcopy failed, diskette problem?\n"; -chdir($tempdir); -&gunzip('initrd.gz') == 0 or die "Gunzip of initrd.gz failed\n"; -if ($ffw29) { - extendinitrd("initrd", 5760); - system("mv newinitrd initrd"); -} -mkdir($tempmount, 0755); -&loopbackmount('initrd', $tempmount) == 0 or die "Loopback mount failed\n"; -&dostounix("$libdir/linuxrc", "linuxrc") if (-r "$libdir/linuxrc"); -unless (&dostounix("$libdir/floppyfw.ini", "floppyfw.ini")) { - &dostounix("floppyfw/floppyfw.ini", $ffw29 ? "etc/floppyfw.ini" : "floppyfw.ini"); -} -&dostounix("config", $ffw29 ? "etc/config.prelogin" : "etc/config"); -for my $i (glob('*.bz2 floppyfw/add.bz2 modules/*.bz2 packages/*.bz2')) { - &bunzip2untar($i, $tempmount); -} -for my $i (glob('packages/*.ini')) { - my $file = $i; - $file =~ s:packages/::; - &dostounix($i, "etc/$file"); -} -&dostounix("hosts", "etc/hosts"); -&dostounix("modules.lst", "etc/modules.lst"); -&dostounix("network.ini", "etc/network.init"); -&dostounix("firewall.ini", "etc/firewall.init"); -&dostounix("syslog.cfg", "etc/syslog.conf"); -&dostounix("packages/timeinfo", "etc/localtime"); -system("cp -p licenses/* $tempmount/licenses/"); -# This conditional code is for 1.1.2 and below -unless (glob('modules/*.bz2')) { - print "Copying additional modules\n" if ($verbose); - system("cp -p modules/* $tempmount/lib/modules/"); -} -# If a timezone file has been specified, copy that onto initrd -if (defined($localtime)) { - if (-r $localtime) { - print "Copying $localtime to $tempmount/etc/localtime\n"; - system("cp -p $localtime $tempmount/etc/localtime"); - } else { - print "$localtime: $!\n"; - } -} -&loopbackumount($tempmount) == 0 or die "Loopback umount failed\n"; -&gzip('initrd') == 0 or die "Gzip of initrd failed\n"; -if ($nonet) { - print "Floppyfw directory in $tempdir\n"; -} else { - print "Calling mk$format-linux to make the netbootable image\n" if ($verbose); - $output = "$tftpdir/floppyfw-$version.nb" if (!defined($output)); - system("mk$format-linux $append --output=$output vmlinuz initrd.gz"); - system("rm -fr $tempdir"); -} diff --git a/gpxe/contrib/mklrpnb/README.txt b/gpxe/contrib/mklrpnb/README.txt deleted file mode 100644 index c99c55c6..00000000 --- a/gpxe/contrib/mklrpnb/README.txt +++ /dev/null @@ -1,4 +0,0 @@ -This is a quick and dirty Perl program to make a netbootable -image from a Linux Router floppy. It was tested with a Coyote Linux -(http://www.coyotelinux.com) floppy which is based on LRP. You need tar, -mtools, mknbi-1.0, and of course, perl, to run this script. diff --git a/gpxe/contrib/mklrpnb/extractdach.pl b/gpxe/contrib/mklrpnb/extractdach.pl deleted file mode 100644 index 6c81da38..00000000 --- a/gpxe/contrib/mklrpnb/extractdach.pl +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/perl -w -# -# A program to make a netbootable image from a LRP firewall floppy -# -# Tested on a Dachstein Linux floppy image available from -# http://lrp1.steinkuehler.net/ or via http://leaf.sourceforge.net/ - -# The most recent version of this script and a companion HowTo is available at -# http://members.optushome.com.au/graybeard/linux/netboot.html -# -# Modified from the mklrpnb file found in the contrib/mklrpnb directory of the -# Etherboot source at http://etherboot.sourceforge.net/ -# -# Modifications by Glenn McK <graybeard@users.sourceforge.net> -# $Id$ -##################################### - -# this entry will need changing -$image = "/home/graybeard/etherboot/dachstein-v1.0.2-1680.bin"; - -# these can remain, but change them if desired -# -# the next argument defaults to firewall if no other name is passed via the -# command line, this will be the directory where distribution will be expanded -# under $base and also the directory in /tftpboot for lrp.nb - -my $uniqdir = shift || 'firewall'; - -$mntdir = "/mnt/floppy"; # where the above image file can be mounted -$tftpbase = "/tftpboot"; -$tftpboot = "$tftpbase/$uniqdir"; # where the netboot images will be available -$base = "/usr/src/LRP"; -$dachorg = "$base/dach-org-$uniqdir"; # a copy required to make the distribution -$dachnew = "$base/lrp-$uniqdir"; # the base files for the new distribution -$packages = "$dachnew/var/lib/lrpkg"; # list to allow lrcfg to display Packages - -# everything below should be okay -###################################### - -if ( !-e $image ) { - print -"\n\tA valid LRP file and directory are required\n\tdownload one then edit $0\n\n"; - exit 1; -} -if ( !-d $base ) { - mkdir( $base, 0700 ); -} - -if ( !-d $dachorg ) { - mkdir( $dachorg, 0700 ); -} - -if ( !-d $dachnew ) { - mkdir( $dachnew, 0700 ); - `umount $mntdir`; - `mount -o ro,loop $image $mntdir`; - - `cp -vr $mntdir/* $dachorg/`; - - @cfg = `cat $mntdir/syslinux.cfg`; - - unless ( defined(@cfg) ) { - print "Cannot find syslinux.cfg on $mntdir\n"; - exit 1; - } - print "cfg = @cfg\n"; - ($append) = grep( /append/, @cfg ); # find the append= line - print "append = \n$append\n"; - chomp($append); # remove trailing newline - $append =~ s/append=//; # remove the append= at beginning - print "strip append = \n$append\n\n"; - @args = split ( / /, $append ); # split into arguments at whitespace - ($root) = grep( /^initrd=/, @args ); # find the initrd= argument - $root =~ s/^initrd=//; # remove the initrd= at beginning - $root =~ s/\.lrp$//; # cleanup for paclages list - print "strip initrd = \n$root\n\n"; - ($lrp) = grep( /^LRP=/, @args ); # find the LRP= argument - $lrp =~ s/^LRP=//; # remove the LRP= at beginning - print "strip LRP =\n$lrp\n\n"; - @lrp = split ( /,/, $lrp ); # split into filenames at , - unshift ( @lrp, $root ); # prepend the root LRP filename - @pack = @lrp; - print "LRP =\n@lrp\n\n"; - $append = ''; - - foreach $i (@args) { # rebuild the append string - next if ( $i =~ /^initrd=/ ); # minus the unneeded parameters - next if ( $i =~ /^LRP=/ ); - next if ( $i =~ /^boot=/ ); - next if ( $i =~ /^PKGPATH=/ ); - print "$i = i\n"; - $append .= "$i "; - } - - print "final append = \n$append\n"; - - chdir($dachnew) or die "$dachnew: $!\n"; - foreach $i (@lrp) { - $i .= '.lrp' if $i !~ /\.lrp$/; - print "\n\n\nUnpacking $i\n"; - system("ln -svf $dachorg/$i ${dachorg}/${i}.tar.gz"); - chmod 0600, "$dachorg/$i"; - system("cat $mntdir/$i | tar zxvf -"); - } - - # create file for lrcfg to display packages - open( PACKAGES, ">$packages/packages" ) - || print "unable to modify $packages:$!\n"; - foreach $line (@pack) { - print PACKAGES "$line\n"; - } - close PACKAGES; - - # prevent previous file from being overwritten during installation - # and also mess with some values in /linuxrc to hide non errors - open( LINUXRC, "$packages/root.linuxrc" ); - @text = <LINUXRC>; - close LINUXRC; - open( LINUXRC, ">$packages/root.linuxrc" ); - foreach $line (@text) { - $line =~ s/PFX\/packages/PFX\/packages-old \ -\t\t\t\t# packages changed to packages-old for netboot setup/; - $line =~ -s/^rc=1/# rc=1 changed to rc=0 to suppress error messages for netboot setup \ -rc=0/; - $line =~ -s/echo -n \" \(nf\!\)\"/#echo -n \" \(nf\!\)\" changed to reflect ToDo list \ -\t\t\techo -n \" netboot setup - No backups possible from this machine - ToFix ?"/; - print LINUXRC $line; - } - close LINUXRC; - - # swap interfaces around in network config file - # eth1 is the new external eth0 is OUR internal server access - open( NETWORK, "$dachnew/etc/network.conf" ) - || print "Unable to modify NETWORK:$!\n"; - @text = <NETWORK>; - close NETWORK; - open( NETWORK, ">$dachnew/etc/network.conf" ) - || print "Unable to modify NETWORK:$!\n"; - foreach $line (@text) { - $line =~ s/eth0/eth00/; - $line =~ s/eth1/eth0/; - $line =~ s/eth00/eth1/; - print NETWORK $line; - } - close NETWORK; - - `echo $append > $dachorg/appendstr`; - - `umount /mnt/floppy`; - print "\nThe files have been extracted to $dachnew\n"; - system("ls -al $dachnew"); -} -else { - print "\n\n\t$image \n \thas already been extracted to $dachnew \ -\tNow skipping to the next step where the netboot file\ -\twill be created.\n"; - - $append = `cat $dachorg/appendstr`; - print "\nThe new append string will be...\n$append\n"; - - chdir($dachnew); - if ( !-d $tftpbase ) { - mkdir( $tftpbase, 0710 ); - system("chgrp nobody $tftpbase"); - } - - unlink($tftpboot); - - # these permissions really need changing to something secure - mkdir( $tftpboot, 0710 ); - system("chgrp nobody $tftpboot"); - print "\tRepacking to $tftpboot/lrp.lrp\n"; - system("tar zcf $tftpboot/lrp.lrp *"); - print "\tExtracting kernel image from $dachorg\n"; - system("cat $dachorg/linux > $tftpboot/lrp.ker"); - print "\tCreating netboot image $tftpboot/lrp.nb\n"; - system( -"mknbi-linux --append='$append' --output=$tftpboot/lrp.nb $tftpboot/lrp.ker $tftpboot/lrp.lrp" - ); - chmod 0604, "$tftpboot/lrp.nb", "$tftpboot/lrp.ker", "$tftpboot/lrp.lrp"; - print "\nThese netboot files are in $tftpboot\n"; - system("ls -al $tftpboot"); - print "\n The owner and permissions for $tftpboot \ - and files should be checked for security. The above\ -permissions assume that tftp is running chroot (nobody) - drwx--r--- root:nobody /tftpboot\n\n"; -} - -exit 0; diff --git a/gpxe/contrib/mklrpnb/mklrpnb b/gpxe/contrib/mklrpnb/mklrpnb deleted file mode 100755 index 47590f74..00000000 --- a/gpxe/contrib/mklrpnb/mklrpnb +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/perl -w -# -# A program to make a netbootable image from a LRP firewall floppy -# Tested on a Coyote Linux floppy -# -@cfg = `mtype a:syslinux.cfg`; -unless (defined(@cfg)) { - print "Cannot find syslinux.cfg on floppy\n"; - exit 1; -} -($append) = grep(/^append/, @cfg); # find the append= line -chomp($append); # remove trailing newline -$append =~ s/append=//; # remove the append= at beginning -@args = split(/ /, $append); # split into arguments at whitespace -($root) = grep(/^initrd=/, @args); # find the initrd= argument -$root =~ s/^initrd=//; # remove the initrd= at beginning -($lrp) = grep(/^LRP=/, @args); # find the LRP= argument -$lrp =~ s/^LRP=//; # remove the LRP= at beginning -@lrp = split(/,/, $lrp); # split into filenames at , -unshift(@lrp, $root); # prepend the root LRP filename -$append = ''; -foreach $i (@args) { # rebuild the append string - next if ($i =~ /^initrd=/); # minus the unneeded parameters - next if ($i =~ /^LRP=/); - next if ($i =~ /^boot=/); - $append .= "$i "; -} -# print "$append\n"; -$tempdir = "/tmp/lrp$$"; -mkdir($tempdir, 0777) or die "$tempdir: $!\n"; -chdir($tempdir) or die "$tempdir: $!\n"; -foreach $i (@lrp) { - $i .= '.lrp' if $i !~ /\.lrp$/; - print "Unpacking $i\n"; - system("mtype a:$i | tar zxvf -"); -} -print "Repacking to /tmp/lrp.lrp\n"; -system("tar zcf /tmp/lrp.lrp *"); -chdir('/tmp') or die "/tmp: $!\n"; -system("rm -fr $tempdir"); -print "Extracting kernel image from floppy\n"; -system("mtype a:linux > /tmp/lrp.ker"); -print "Creating netboot image in /tmp/lrp.nb\n"; -system("mkelf-linux --append='$append' --output=/tmp/lrp.nb /tmp/lrp.ker /tmp/lrp.lrp"); -exit 0; diff --git a/gpxe/contrib/mntnbi/mntnbi.pl b/gpxe/contrib/mntnbi/mntnbi.pl deleted file mode 100755 index 55b81484..00000000 --- a/gpxe/contrib/mntnbi/mntnbi.pl +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/perl -w -# -# Quick Perl program to decode and display details about -# tagged images created by mknbi, and then mount the contained -# DOS filesystem using a loop-back mount -# -# Martin Atkins, November 1998 -# by hacking disnbi by -# Ken Yap, September 1998 -# -# - -sub getvendordata { - my ($flags) = @_; - - my $vendordata = ''; - my $vendorlen = ($flags & 0xff) >> 4; - if ($vendorlen > 0) { - $vendorlen *= 4; - $vendordata = unpack("A$vendorlen", substr($imageheader, $curoffset)); - $curoffset += $vendorlen; - } - return ($vendordata); -} - -sub decodesegmentflags { - my ($flags) = @_; - - $flags >>= 24; - $flags &= 0x3; - ($flags == 0) and $type = "Absolute"; - ($flags == 1) and $type = "Follows last segment"; - ($flags == 2) and $type = "Below end of memory"; - ($flags == 3) and $type = "Below last segment loaded"; - return ($type); -} - -sub onesegment -{ - my ($segnum) = @_; - my ($type, $vendordata); - - my ($flags, $loadaddr, $imagelen, $memlength) = unpack("V4", substr($imageheader, $curoffset)); - $curoffset += 16; - print "Segment number $segnum\n"; - printf "Load address:\t\t%08x\n", $loadaddr; - printf "Image length:\t\t%d\n", $imagelen; - printf "Memory length:\t\t%d\n", $memlength; - $type = &decodesegmentflags($flags); - printf "Position:\t\t$type\n"; - printf "Vendor tag:\t\t%d\n", ($flags >> 8) & 0xff; - if (($vendordata = &getvendordata($flags)) ne '') { - print "Vendor data:\t\t", $vendordata, "\n"; - } - print "\n"; - push (@seglengths, $imagelen); - return (($flags >> 26) & 1); -} - -@seglengths = (); -$#ARGV == 1 or die "Usage: mntnbi tagged-image-file dir\n"; -$imagefile= $ARGV[0]; -open(I, $ARGV[0]) or die "$imagefile: $!\n"; -(defined($status = sysread(I, $imageheader, 512)) and $status == 512) - or die "$imagefile: Cannot read header\n"; -$headerrecord = substr($imageheader, 0, 16); -($magic, $flags, $bx, $ds, $ip, $cs) = unpack("a4Vv4", $headerrecord); -$magic eq "\x36\x13\x03\x1B" or die "$imagefile: Not a tagged image file\n"; -$curoffset = 16; - -# Now decode the header - -printf "Header location:\t%04x:%04x\n", $ds, $bx; -printf "Start address:\t\t%04x:%04x\n", $cs, $ip; -printf "Flags:\n"; - print "Return to loader after execution (extension)\n" if (($flags >> 8) & 1); -if (($vendordata = &getvendordata($flags)) ne '') { - print "Vendor data:\t\t", $vendordata, "\n"; -} -print "\n"; - -# Now decode each segment record - -$segnum = 1; -do { - $lastrecord = &onesegment($segnum); - ++$segnum; -} while (!$lastrecord); - -if ($#seglengths != 1) { - die "This is not a DOS image $#seglengths\n"; -} -$offset = 512 + $seglengths[0]; -print "mounting filesystem at offset $offset in $ARGV[0] on $ARGV[1]\n"; -$rc = system "mount $ARGV[0] $ARGV[1] -t msdos -o loop,offset=$offset"; -print "Done\n" if ($rc == 0); -exit(0); diff --git a/gpxe/contrib/nfs-swap/README b/gpxe/contrib/nfs-swap/README deleted file mode 100644 index b95e5d7b..00000000 --- a/gpxe/contrib/nfs-swap/README +++ /dev/null @@ -1,2 +0,0 @@ -For more information please check -http://nfs-swap.dot-heine.de diff --git a/gpxe/contrib/p910nd-0.8/Makefile b/gpxe/contrib/p910nd-0.8/Makefile deleted file mode 100644 index c2827d27..00000000 --- a/gpxe/contrib/p910nd-0.8/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# Comment out the second command and uncomment the first command -# below if you don't want to use libwrap (hosts.{allow,deny} access control) - -# If you don't have it in /var/log/subsys, uncomment and define -#CFLAGS+=-DLOCKFILE_DIR=\"/var/log\" -LIBWRAP=-lwrap - -p910nd: p910nd.c -# $(CC) -Wall $(CFLAGS) -o $@ p910nd.c - $(CC) -Wall $(CFLAGS) -DUSE_LIBWRAP -o $@ p910nd.c $(LIBWRAP) diff --git a/gpxe/contrib/p910nd-0.8/banner.pl b/gpxe/contrib/p910nd-0.8/banner.pl deleted file mode 100755 index 5a238c80..00000000 --- a/gpxe/contrib/p910nd-0.8/banner.pl +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/perl -while (1) -{ - exit 0 if read(STDIN,$c,1) == 0; - last if ($cl eq "\031" && $c eq "\001"); - $cl = $c; -} -kill 'STOP',$$; -exit 0 diff --git a/gpxe/contrib/p910nd-0.8/client.pl b/gpxe/contrib/p910nd-0.8/client.pl deleted file mode 100755 index 0b0e4c36..00000000 --- a/gpxe/contrib/p910nd-0.8/client.pl +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl - -# edit this to the printer hostname -$them = 'ken'; -$port = 9101; - -open(STDIN, "$ARGV[0]") if $#ARGV >= 0; - -use Socket; -#use Sys::Hostname; - -#$hostname = hostname; - -($name, $aliases, $proto) = getprotobyname('tcp'); -($name, $aliases, $port) = getservbyname($port, 'tcp') - unless $port =~ /^\d+$/; - -#$thisaddr = inet_aton($hostname); -#defined($thisaddr) or &errexit("inet_aton: cannot resolve $hostname\n"); - -$thataddr = inet_aton($them); -defined($thataddr) or &errexit("inet_aton: cannot resolve $them\n"); - -socket(S, PF_INET, SOCK_STREAM, $proto) or &errexit("socket: $!\n"); - -#$this = sockaddr_in(0, $thisaddr); -#bind(S, $this) || &errexit("bind: $!\n"); - -$that = sockaddr_in($port, $thataddr); -connect(S, $that) || &errexit("connect: $!\n"); - -select(S); $| = 1; select(STDOUT); - -$buffer = ''; -while (1) -{ - $rin = ''; - vec($rin, fileno(S), 1) = 1; - $nfound = select($rout=$rin, $wout=$rin, undef, undef); - if (vec($rout, fileno(S), 1)) { - print STDERR "$buffer\n" if - defined($nread = sysread(S, $buffer, 8192)); - } - if (vec($wout, fileno(S), 1)) { - $nread = read(STDIN, $buffer, 8192); - last if $nread == 0; - &errexit("write: $!\n") unless - defined($written = syswrite(S,$buffer,$nread)); - } -} -close(S); -exit 0; - -sub errexit -{ - print STDERR @_; - exit 2; -} diff --git a/gpxe/contrib/p910nd-0.8/p910nd.8 b/gpxe/contrib/p910nd-0.8/p910nd.8 deleted file mode 100644 index 24572c47..00000000 --- a/gpxe/contrib/p910nd-0.8/p910nd.8 +++ /dev/null @@ -1,93 +0,0 @@ -.TH P910ND 8 "1 August 2004" -.SH NAME -p910nd \- port 9100+n printer daemon -.SH SYNOPSIS -.B p910nd -[\fB-f device\fR] -[\fB-i bindaddr\fR] -[\fB-bv\fR] -[\fB0|1|2\fR] -.SH DESCRIPTION -.I p910nd -is a small daemon that copies any data received on the port -it is listening on to the corresponding printer port. -It is primarily intended for diskless Linux hosts running as printer drivers -but there is no reason why it could not be used on diskful hosts. -Port 9100 is copied to /dev/lp0, 9101 to /dev/lp1 and 9102 to /dev/lp2. -The default is port 9100 to /dev/lp0. -.LP -The \fB-f\fR option can be used to specify a different printer device, -e.g. /dev/usblp0. -.LP -The \fB-i\fR option can be used to specify binding to one address instead -of all interfaces which is the default. -.LP -The \fB-b\fR option turns on bidirectional copying. -.LP -The \fB-v\fR option shows the version number. -.SH INSTALLATION -.I p910nd -can be run as a standalone daemon or from inetd. -It will automatically detect if it is running under inetd. -.LP -A sample SysVinit script, -.IR p910nd.sh , -is provided for operation as a daemon. -.I p910nd -will change its name under ps to match the printer port, i.e. -.I p9100d, p9101d -and -.IR p9102d . -.LP -When running under inetd, the -.I /etc/inetd.conf -entry should look something like this (with tcpwrappers protection): -.sp -.nf -p9101 stream tcp nowait root /usr/sbin/tcpd /sbin/p910nd -.fi -.sp -Don't forget to add an entry in -.I /etc/services -for the corresponding port. -.LP -If operating with lprng, use the host%port syntax for the -printer device to send jobs to it. -.LP -If operating with CUPS, this is supported as the AppSocket -protocol, also known as the JetDirect (probably TM) protocol. -.LP -If operating with classic Berkeley lpd, a sample client, -.IR client.pl , -is provided. -This should be installed as the ifilter (if=) in /etc/printcap. -.I banner.pl -should be installed as the ofilter (of=) in /etc/printcap. -It may be necessary to create a dummy spool file for lpd (lp=). -This file will be opened but not written to. -The corresponding C versions are left as an exercise for the reader. -.LP -When running under inetd, more than one instance could be started. -To avoid problems with multiple instances attempting to access the -printer at the same time, make sure that only one client is active -at any one time. This can be done by designating one host as the -spooler and sending all jobs to this host. You will probably -need to set up an intermediate queue anyway to provide print job filtering. -.LP -If compiled with USE_LIBWRAP and linked with -lwrap, it uses the libwrap -library (tcpwrappers). Access control can be done with /etc/hosts.allow -and /etc/hosts.deny. The service name is p910nd. -.SH DIAGNOSTICS -.I p910nd -logs error messages to syslog. -.SH "SEE ALSO" -printcap(5), hosts_access(5) -.SH FILES -/var/run/p9100d.pid, /var/lock/subsys/p9100d, /etc/hosts.allow, /etc/hosts.deny -.SH COPYRIGHT -.I p910nd -is under the GNU Public License -.SH AUTHOR -Ken Yap (ken_yap@users.sourceforge.net) -.SH DATE -Version 0.8 October 2004 diff --git a/gpxe/contrib/p910nd-0.8/p910nd.c b/gpxe/contrib/p910nd-0.8/p910nd.c deleted file mode 100644 index c2473d8d..00000000 --- a/gpxe/contrib/p910nd-0.8/p910nd.c +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Port 9100+n daemon - * Accepts a connection from port 9100+n and copy stream to - * /dev/lpn, where n = 0,1,2. - * - * Run standalone as: p910nd [0|1|2] - * - * Run under inetd as: - * p910n stream tcp nowait root /usr/sbin/tcpd p910nd [0|1|2] - * where p910n is an /etc/services entry for - * port 9100, 9101 or 9102 as the case may be. - * root can be replaced by any uid with rw permission on /dev/lpn - * - * Port 9100+n will then be passively opened - * n defaults to 0 - * - * Version 0.8 - * Allow specifying address to bind to - * - * Version 0.7 - * Bidirectional data transfer - * - * Version 0.6 - * Arne Bernin fixed some cast warnings, corrected the version number - * and added a -v option to print the version. - * - * Version 0.5 - * -DUSE_LIBWRAP and -lwrap enables hosts_access (tcpwrappers) checking. - * - * Version 0.4 - * Ken Yap (ken_yap@users.sourceforge.net), April 2001 - * Placed under GPL. - * - * Added -f switch to specify device which overrides /dev/lpn. - * But number is still required get distinct ports and locks. - * - * Added locking so that two invocations of the daemon under inetd - * don't try to open the printer at the same time. This can happen - * even if there is one host running clients because the previous - * client can exit after it has sent all data but the printer has not - * finished printing and inetd starts up a new daemon when the next - * request comes in too soon. - * - * Various things could be Linux specific. I don't - * think there is much demand for this program outside of PCs, - * but if you port it to other distributions or platforms, - * I'd be happy to receive your patches. - */ - -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <getopt.h> -#include <ctype.h> -#include <string.h> -#include <fcntl.h> -#include <netdb.h> -#include <syslog.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/resource.h> -#include <sys/stat.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#ifdef USE_LIBWRAP -#include "tcpd.h" -int allow_severity, deny_severity; -extern int hosts_ctl(char *daemon, char *client_name, - char *client_addr, char *client_user); -#endif - -#define BASEPORT 9100 -#define PIDFILE "/var/run/p910%cd.pid" -#ifdef LOCKFILE_DIR -#define LOCKFILE LOCKFILE_DIR "/p910%cd" -#else -#define LOCKFILE "/var/lock/subsys/p910%cd" -#endif -#define PRINTERFILE "/dev/lp%c" -#define LOGOPTS LOG_ERR - -static char *progname; -static char version[] = "p910nd Version 0.8"; -static int lockfd = -1; -static char *device = 0; -static int bidir = 0; -static char *bindaddr = 0; - -void usage(void) -{ - fprintf(stderr, "Usage: %s [-f device] [-i bindaddr] [-bv] [0|1|2]\n", progname); - exit(1); -} - -void show_version (void) -{ - fprintf(stdout, "%s \n", version); -} - -FILE *open_printer(int lpnumber) -{ - FILE *f; - char lpname[sizeof(PRINTERFILE)]; - -#ifdef TESTING - (void)snprintf(lpname, sizeof(lpname), "/dev/tty"); -#else - (void)snprintf(lpname, sizeof(lpname), PRINTERFILE, lpnumber); -#endif - if (device == 0) - device = lpname; - if ((f = fopen(device, bidir ? "w+" : "w")) == NULL) - { - syslog(LOGOPTS, "%s: %m\n", device); - exit(1); - } - return (f); -} - -int get_lock(int lpnumber) -{ - char lockname[sizeof(LOCKFILE)]; - struct flock lplock; - - (void)snprintf(lockname, sizeof(lockname), LOCKFILE, lpnumber); - if ((lockfd = open(lockname, O_CREAT|O_RDWR)) < 0) - { - syslog(LOGOPTS, "%s: %m\n", lockname); - return (0); - } - memset(&lplock, 0, sizeof(lplock)); - lplock.l_type = F_WRLCK; - lplock.l_pid = getpid(); - if (fcntl(lockfd, F_SETLKW, &lplock) < 0) - { - syslog(LOGOPTS, "%s: %m\n", lockname); - return (0); - } - return (1); -} - -void free_lock(void) -{ - if (lockfd >= 0) - (void)close(lockfd); -} - -/* Copy network socket to FILE f until EOS */ -int copy_stream(int fd, FILE *f) -{ - int nread; - char buffer[8192]; - - if (bidir) { - FILE *nf; - - if ((nf = fdopen(fd, "w")) == NULL) { - syslog(LOGOPTS, "fdopen: %m\n"); - } - for (;;) { - fd_set readfds; - int result; - int maxfd = fileno(f) > fd ? fileno(f) : fd; - FD_ZERO(&readfds); - FD_SET(fileno(f), &readfds); - FD_SET(fd, &readfds); - result = select(maxfd + 1, &readfds, 0, 0, 0); - if (result < 0) - return (result); - if (result == 0) - continue; - if (FD_ISSET(fd, &readfds)) { - nread = read(fd, buffer, sizeof(buffer)); - if (nread <= 0) - break; - (void)fwrite(buffer, sizeof(char), nread, f); - } - if (FD_ISSET(fileno(f), &readfds)) { - nread = read(fileno(f), buffer, sizeof(buffer)); - if (nread > 0 && nf != NULL) { - (void)fwrite(buffer, sizeof(char), nread, nf); - (void)fflush(nf); - } - } - } - (void)fflush(f); - (void)fclose(nf); - return (0); - } else { - while ((nread = read(fd, buffer, sizeof(buffer))) > 0) - (void)fwrite(buffer, sizeof(char), nread, f); - (void)fflush(f); - return (nread); - } -} - -void one_job(int lpnumber) -{ - FILE *f; - struct sockaddr_in client; - socklen_t clientlen = sizeof(client); - - if (getpeername(0, (struct sockaddr*) &client, &clientlen) >= 0) - syslog(LOGOPTS, "Connection from %s port %hu\n", - inet_ntoa(client.sin_addr), - ntohs(client.sin_port)); - if (get_lock(lpnumber) == 0) - return; - f = open_printer(lpnumber); - if (copy_stream(0, f) < 0) - syslog(LOGOPTS, "copy_stream: %m\n"); - fclose(f); - free_lock(); -} - -void server(int lpnumber) -{ - struct rlimit resourcelimit; -#ifdef USE_GETPROTOBYNAME - struct protoent *proto; -#endif - int netfd, fd, one = 1; - socklen_t clientlen; - struct sockaddr_in netaddr, client; - char pidfilename[sizeof(PIDFILE)]; - FILE *f; - int ipret; - -#ifndef TESTING - switch (fork()) - { - case -1: - syslog(LOGOPTS, "fork: %m\n"); - exit (1); - case 0: /* child */ - break; - default: /* parent */ - exit(0); - } - /* Now in child process */ - resourcelimit.rlim_max = 0; - if (getrlimit(RLIMIT_NOFILE, &resourcelimit) < 0) - { - syslog(LOGOPTS, "getrlimit: %m\n"); - exit(1); - } - for (fd = 0; fd < resourcelimit.rlim_max; ++fd) - (void)close(fd); - if (setsid() < 0) - { - syslog(LOGOPTS, "setsid: %m\n"); - exit(1); - } - (void)chdir("/"); - (void)umask(022); - fd = open("/dev/null", O_RDWR); /* stdin */ - (void)dup(fd); /* stdout */ - (void)dup(fd); /* stderr */ - (void)snprintf(pidfilename, sizeof(pidfilename), PIDFILE, lpnumber); - if ((f = fopen(pidfilename, "w")) == NULL) - { - syslog(LOGOPTS, "%s: %m\n", pidfilename); - exit(1); - } - (void)fprintf(f, "%d\n", getpid()); - (void)fclose(f); - if (get_lock(lpnumber) == 0) - exit(1); -#endif - f = open_printer(lpnumber); -#ifdef USE_GETPROTOBYNAME - if ((proto = getprotobyname("tcp")) == NULL) - { - syslog(LOGOPTS, "Cannot find protocol for TCP!\n"); - exit(1); - } - if ((netfd = socket(AF_INET, SOCK_STREAM, proto->p_proto)) < 0) -#else - if ((netfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0) -#endif - { - syslog(LOGOPTS, "socket: %m\n"); - exit(1); - } - if (setsockopt(netfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) - { - syslog(LOGOPTS, "setsocketopt: %m\n"); - exit(1); - } - netaddr.sin_port = htons(BASEPORT + lpnumber - '0'); - if (bindaddr == 0) { - netaddr.sin_addr.s_addr = htonl(INADDR_ANY); - } else { - ipret = inet_pton(AF_INET, bindaddr, &netaddr.sin_addr.s_addr); - if (ipret < 0) { - syslog(LOGOPTS, "inet_pton: %m\n"); - exit(1); - } else if (ipret == 0) { - syslog(LOGOPTS, "inet_pton: invalid bind IP address\n"); - exit(1); - } - } - memset(netaddr.sin_zero, 0, sizeof(netaddr.sin_zero)); - if (bind(netfd, (struct sockaddr*) &netaddr, sizeof(netaddr)) < 0) - { - syslog(LOGOPTS, "bind: %m\n"); - exit(1); - } - if (listen(netfd, 5) < 0) - { - syslog(LOGOPTS, "listen: %m\n"); - exit(1); - } - clientlen = sizeof(client); - memset(&client, 0, sizeof(client)); - while ((fd = accept(netfd, (struct sockaddr*) &client, &clientlen)) >= 0) - { -#ifdef USE_LIBWRAP - if (hosts_ctl("p910nd", STRING_UNKNOWN, - inet_ntoa(client.sin_addr), STRING_UNKNOWN) == 0) { - syslog(LOGOPTS, "Connection from %s port %hd rejected\n", - inet_ntoa(client.sin_addr), - ntohs(client.sin_port)); - close(fd); - continue; - } -#endif - syslog(LOGOPTS, "Connection from %s port %hd accepted\n", - inet_ntoa(client.sin_addr), - ntohs(client.sin_port)); - /*write(fd, "Printing", 8);*/ - if (copy_stream(fd, f) < 0) - syslog(LOGOPTS, "copy_stream: %m\n"); - (void)close(fd); - } - syslog(LOGOPTS, "accept: %m\n"); - free_lock(); - exit(1); -} - -int is_standalone(void) -{ - struct sockaddr_in bind_addr; - socklen_t ba_len; - - /* - * Check to see if a socket was passed to us from inetd. - * - * Use getsockname() to determine if descriptor 0 is indeed a socket - * (and thus we are probably a child of inetd) or if it is instead - * something else and we are running standalone. - */ - ba_len = sizeof(bind_addr); - if (getsockname(0, (struct sockaddr*) &bind_addr, &ba_len) == 0) - return (0); /* under inetd */ - if (errno != ENOTSOCK) /* strange... */ - syslog(LOGOPTS, "getsockname: %m\n"); - return (1); -} - -int main(int argc, char *argv[]) -{ - int c, lpnumber; - char *p; - - if (argc <= 0) /* in case not provided in inetd.conf */ - progname = "p910nd"; - else - { - progname = argv[0]; - if ((p = strrchr(progname, '/')) != 0) - progname = p + 1; - } - lpnumber = '0'; - while ((c = getopt(argc, argv, "bi:f:v")) != EOF) - { - switch (c) - { - case 'b': - bidir = 1; - break; - case 'f': - device = optarg; - break; - case 'i': - bindaddr = optarg; - break; - case 'v': - show_version(); - break; - default: - usage(); - break; - } - } - argc -= optind; - argv += optind; - if (argc > 0) - { - if (isdigit(argv[0][0])) - lpnumber = argv[0][0]; - } - /* change the n in argv[0] to match the port so ps will show that */ - if ((p = strstr(progname, "p910n")) != NULL) - p[4] = lpnumber; - - /* We used to pass (LOG_PERROR|LOG_PID|LOG_LPR|LOG_ERR) to syslog, but - * syslog ignored the LOG_PID and LOG_PERROR option. I.e. the intention - * was to add both options but the effect was to have neither. - * I disagree with the intention to add PERROR. --Stef */ - openlog (p, LOG_PID, LOG_LPR); - if (is_standalone()) - server(lpnumber); - else - one_job(lpnumber); - return (0); -} diff --git a/gpxe/contrib/p910nd-0.8/p910nd.sh b/gpxe/contrib/p910nd-0.8/p910nd.sh deleted file mode 100755 index 291a836a..00000000 --- a/gpxe/contrib/p910nd-0.8/p910nd.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# -# p910nd.sh This shell script takes care of starting and stopping -# p910nd (port 9100+n printer daemon) -# This script only controls the one on port 9101. -# You can start others if you wish. -# - -# Todo: Make it fully LSB - -# See how we were called. -case "$1" in - start) - # Start daemons. - echo -n "Starting p910nd: " - # default port is 1 so it will appear as p9101d on a ps - start_daemon p910nd - echo - ;; - stop) - # Stop daemons. - echo -n "Shutting down p910nd: " - killproc p9101d - echo - rm -f /var/run/p9101.pid - ;; - status) - status p9101d - ;; - restart) - $0 stop - $0 start - ;; - *) - echo "Usage: p910nd {start|stop|restart|status}" - exit 1 -esac - -exit 0 diff --git a/gpxe/contrib/ppmtoansi/Makefile b/gpxe/contrib/ppmtoansi/Makefile deleted file mode 100644 index bc0ca0a6..00000000 --- a/gpxe/contrib/ppmtoansi/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -CPPFLAGS = -LDLIBS = -CFLAGS = -pipe -g -O2 -Wall -LDFLAGS = -pipe -CC = gcc -LD = gcc -# Some "black" magic to determine optimal compiler flags for target -# architecture -TARGET_ARCH:= $(shell if [ \! -r .compile-options ] ; then ( \ - cpu=`grep cpu /proc/cpuinfo 2>&1 |head -1| \ - cut -d : -f 2-| sed -e 's/ //g'`; \ - if [ x"$$cpu" = x"" ] ; then \ - echo -fno-strength-reduce; \ - else if [ "$$cpu" = "386" ] ; then \ - echo -m386 -fno-strength-reduce; \ - else if [ "$$cpu" = "486" ] ; then \ - echo -m486 -fno-strength-reduce; \ - else if [ "$$cpu" = "Alpha" ] ; then \ - echo -fno-strength-reduce; \ - else echo main\(\)\{\} >.compile-options.c; \ - if gcc -mpentium -o .compile-options.o -c \ - .compile-options.c &>/dev/null; then \ - echo -mpentium -fstrength-reduce; \ - else if gcc -m486 -malign-functions=2 -malign-jumps=2 \ - -malign-loops=2 -o .compile-options.o -c \ - .compile-options.c &>/dev/null; then \ - echo -n -m486 -malign-functions=2 -malign-jumps=2; \ - echo ' '-malign-loops=2 -fno-strength-reduce; \ - else echo -m486; \ - fi;fi;fi;fi;fi;fi) > .compile-options; \ - rm -f .compile-options.c .compile-options.o; \ - fi; cat .compile-options) -ASFLAGS = $(TARGET_ARCH) - -OBJS = ppmtoansi.o - -############################################################################## - -ifeq (.depend,$(wildcard .depend)) -all: ppmtoansi -include .depend -else -all: depend - @$(MAKE) all -endif - -############################################################################## - -ppmtoansi: $(OBJS) - -############################################################################## - -clean: - $(RM) *~ *.o *.dvi *.log *.aux *yacc.tab.[ch] *yacc.output *lex.[co] \ - *.dat .depend .tmp_depend .compile-options* - strip ppmtoansi >&/dev/null || true - -distclean: clean - $(RM) -rf ppmtoansi - -############################################################################## - -depend: - for i in *.c;do $(CPP) $(CPPFLAGS) -MM $$i;done >.tmp_depend - mv .tmp_depend .depend - -############################################################################## diff --git a/gpxe/contrib/ppmtoansi/demo/dos.ansi b/gpxe/contrib/ppmtoansi/demo/dos.ansi deleted file mode 100644 index 2ce5cda4..00000000 --- a/gpxe/contrib/ppmtoansi/demo/dos.ansi +++ /dev/null @@ -1 +0,0 @@ -[9;;1- [15;;1- [18;;5-Ûl[9;1;3-$€[13;1;3-$€[17;1;1-À[9;2;1- [12;2;1- [15;2;1- [17;2;1-À[9;3;1- [15;3;1- [18;3;5-Ûl[9;4;1- [15;4;1- [23;4;1-À[9;5;1- [15;5;1- [23;5;1-À[9;6;1- [15;6;1- [18;6;5-Ûl[8;8;4-I [14;8;4-m°[19;8;5-¶Ú[8;9;1-@[12;9;2-L[18;9;2-¬[8;10;1-@[11;10;1-`[13;10;1-@[18;10;1- [20;10;1-`[8;11;1-@[11;11;1-`[13;11;1-@[19;11;5-¶Ú[8;12;1-@[11;12;1-`[13;12;1-@[20;12;1-`[24;12;1- [8;13;1-@[12;13;2-L[18;13;2-l[24;13;1- [8;14;4-I [14;14;4-m°[19;14;5-¶Ú
\ No newline at end of file diff --git a/gpxe/contrib/ppmtoansi/demo/dos.ppm b/gpxe/contrib/ppmtoansi/demo/dos.ppm deleted file mode 100644 index 6efde7fa..00000000 --- a/gpxe/contrib/ppmtoansi/demo/dos.ppm +++ /dev/null @@ -1,51 +0,0 @@ -P3 -17 16 -65535 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 -0 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 65535 0 0 -65535 0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 -0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 0 0 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 -0 65535 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 65535 0 65535 -0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 65535 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/dos.xpm b/gpxe/contrib/ppmtoansi/demo/dos.xpm deleted file mode 100644 index 471c4edf..00000000 --- a/gpxe/contrib/ppmtoansi/demo/dos.xpm +++ /dev/null @@ -1,29 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"17 16 6 1", -/* colors */ -"` c #000000", -"a c #00FFFF", -"b c #00FF00", -"c c #FF00FF", -"d c #FF0000", -"e c #FFFF00", -/* pixels */ -"`d`````d``aaaaa``", -"`ddd`ddd`a```````", -"`d``d``d`a```````", -"`d`````d``aaaaa``", -"`d`````d```````a`", -"`d`````d```````a`", -"`d`````d``aaaaa``", -"`````````````````", -"bbbb``eeee`ccccc`", -"b```be````ce`````", -"b``e`b````c`e````", -"b``e`b`````ccccc`", -"b``e`b``````e```c", -"b```be````ee````c", -"bbbb``eeee`ccccc`", -"`````````````````" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/etherboot.ansi b/gpxe/contrib/ppmtoansi/demo/etherboot.ansi Binary files differdeleted file mode 100644 index 7975f36c..00000000 --- a/gpxe/contrib/ppmtoansi/demo/etherboot.ansi +++ /dev/null diff --git a/gpxe/contrib/ppmtoansi/demo/etherboot.ppm b/gpxe/contrib/ppmtoansi/demo/etherboot.ppm deleted file mode 100644 index da5b2458..00000000 --- a/gpxe/contrib/ppmtoansi/demo/etherboot.ppm +++ /dev/null @@ -1,99 +0,0 @@ -P3 -32 16 -65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 -0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 -0 65535 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 -0 0 0 0 65535 0 0 0 0 0 0 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -0 0 0 65535 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 -0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -0 0 0 65535 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 -0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 -0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 65535 65535 -0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/etherboot.xpm b/gpxe/contrib/ppmtoansi/demo/etherboot.xpm deleted file mode 100644 index d4217146..00000000 --- a/gpxe/contrib/ppmtoansi/demo/etherboot.xpm +++ /dev/null @@ -1,27 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"32 16 4 1", -/* colors */ -"` c #000000", -"a c #00FFFF", -"b c #00FF00", -"c c #FF0000", -/* pixels */ -"``a``a``a``a``a``a``a``a``a``a``", -"``a``a``a``a``a``a``a``a``a``a``", -"cccccccccccccccccccccccccccccccc", -"c``bbbb`bbbb`bbbb`bbbbb`bbbb```c", -"c``bbbb`b``b`b``b```b```bbbb```c", -"c``b``b`b``b`b``b```b```b``````c", -"`c`bbbb`bbbb`bbbb```b```b``````c", -"``c````````````````````````````c", -"`c`bbbbb`bbbb`bbbbb`bbbb```````c", -"c````b```b``````b```bbbb```````c", -"c````b```bbb````b```b``````````c", -"c````b```b``````b```b``````````c", -"cccccccccccccccccccccccccccccccc", -"``a``a``a``a``a``a``a``a``a``a``", -"``a``a``a``a``a``a``a``a``a``a``", -"````````````````````````````````" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/flash.ansi b/gpxe/contrib/ppmtoansi/demo/flash.ansi deleted file mode 100644 index 43837a78..00000000 --- a/gpxe/contrib/ppmtoansi/demo/flash.ansi +++ /dev/null @@ -1 +0,0 @@ -[11;;2-l[11;1;2-l[17;1;1-`[11;2;2-l[16;2;2-l[11;3;2-l[15;3;3-m€[11;4;2-l[14;4;4-m°[11;5;2-l[14;5;4-m°[11;6;4-m°[16;6;2-l[11;7;4-m°[16;7;2-l[11;8;3-m€[16;8;2-l[11;9;2-l[16;9;2-l[11;10;1-`[16;10;2-l[16;11;2-l[13;12;2-l[16;12;2-l[19;12;2-l[14;13;6-m¶À[15;14;4-m°[16;15;2-l
\ No newline at end of file diff --git a/gpxe/contrib/ppmtoansi/demo/flash.ppm b/gpxe/contrib/ppmtoansi/demo/flash.ppm deleted file mode 100644 index 1464af6e..00000000 --- a/gpxe/contrib/ppmtoansi/demo/flash.ppm +++ /dev/null @@ -1,35 +0,0 @@ -P3 -10 16 -65535 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 65535 0 65535 65535 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 65535 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/flash.xpm b/gpxe/contrib/ppmtoansi/demo/flash.xpm deleted file mode 100644 index 25419d70..00000000 --- a/gpxe/contrib/ppmtoansi/demo/flash.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"10 16 2 1", -/* colors */ -" c #000000", -"x c #FFFF00", -/* pixels */ -"xx ", -"xx x ", -"xx xx ", -"xx xxx ", -"xx xxxx ", -"xx xxxx ", -"xxxx xx ", -"xxxx xx ", -"xxx xx ", -"xx xx ", -"x xx ", -" xx ", -" xx xx xx", -" xxxxxx ", -" xxxx ", -" xx ", -}; diff --git a/gpxe/contrib/ppmtoansi/demo/floppy.ansi b/gpxe/contrib/ppmtoansi/demo/floppy.ansi deleted file mode 100644 index f4267f40..00000000 --- a/gpxe/contrib/ppmtoansi/demo/floppy.ansi +++ /dev/null @@ -1 +0,0 @@ -[9;;14-%’Ûm¶@[8;1;16-$²[l’É[8;2;17-$²[l’É [8;3;17-$²[l’É [8;4;17-$¶Ûm¶É [8;5;17;1+[8;6;17;1+[8;7;17-$í¶Ûm‰ [8;8;17-$ëm¶Û‰ [8;9;17-$í¶Ûm‰ [8;10;17-$ëm¶Û‰ [8;11;17-$í¶Ûm‰ [8;12;17-$ëm¶Û‰ [8;13;17-2m¶Ûm¤ [8;14;17-2km¶Û¤ [9;15;15-'m¶ÛlH
\ No newline at end of file diff --git a/gpxe/contrib/ppmtoansi/demo/floppy.ppm b/gpxe/contrib/ppmtoansi/demo/floppy.ppm deleted file mode 100644 index 2b0b2863..00000000 --- a/gpxe/contrib/ppmtoansi/demo/floppy.ppm +++ /dev/null @@ -1,51 +0,0 @@ -P3 -17 16 -65535 -0 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 0 0 0 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 -65535 0 0 65535 65535 0 65535 0 0 65535 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 -65535 0 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 -65535 0 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 65535 65535 65535 0 65535 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -65535 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 0 0 65535 0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 0 65535 0 0 65535 65535 0 0 -65535 0 0 0 0 65535 0 0 65535 0 65535 65535 65535 0 65535 65535 0 65535 -65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -65535 0 65535 0 65535 65535 0 0 65535 0 0 65535 65535 0 0 -0 0 0 65535 0 0 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 65535 0 0 65535 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/floppy.xpm b/gpxe/contrib/ppmtoansi/demo/floppy.xpm deleted file mode 100644 index 8bb60d29..00000000 --- a/gpxe/contrib/ppmtoansi/demo/floppy.xpm +++ /dev/null @@ -1,29 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"17 16 6 1", -/* colors */ -"` c #000000", -"a c #00FFFF", -"b c #FF00FF", -"c c #FF0000", -"d c #FFFF00", -"e c #0000FF", -/* pixels */ -"`ccdccddddddddc``", -"cccdccddddcccdcc`", -"cccdccddddcccdccc", -"cccdccddddcccdccc", -"cccdddddddddddccc", -"ccccccccccccccccc", -"ccccccccccccccccc", -"cccaaaaaaaaaaaccc", -"cccabbbbbbbbbaccc", -"cccaaaaaaaaaaaccc", -"cccabbbbbbbbbaccc", -"cccaaaaaaaaaaaccc", -"cccabbbbbbbbbaccc", -"ceeaaaaaaaaaaaeec", -"ceeabbbbbbbbbaeec", -"`ccaaaaaaaaaaacc`" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/hd.ansi b/gpxe/contrib/ppmtoansi/demo/hd.ansi Binary files differdeleted file mode 100644 index 33bda53c..00000000 --- a/gpxe/contrib/ppmtoansi/demo/hd.ansi +++ /dev/null diff --git a/gpxe/contrib/ppmtoansi/demo/hd.ppm b/gpxe/contrib/ppmtoansi/demo/hd.ppm deleted file mode 100644 index 34878bf9..00000000 --- a/gpxe/contrib/ppmtoansi/demo/hd.ppm +++ /dev/null @@ -1,51 +0,0 @@ -P3 -17 16 -65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 -65535 0 0 0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 65535 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0 -65535 0 0 0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 -0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0 -65535 0 0 0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0 -65535 0 0 0 65535 0 65535 0 65535 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 65535 0 -65535 0 0 65535 65535 0 65535 0 0 0 0 0 0 0 0 -65535 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 -65535 0 0 65535 0 0 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 0 65535 65535 0 65535 65535 0 0 65535 0 0 65535 -0 0 0 0 0 65535 0 65535 65535 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 65535 65535 -0 65535 65535 0 65535 65535 0 0 65535 0 65535 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 65535 65535 0 65535 65535 0 0 65535 -0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 0 65535 0 65535 65535 0 65535 65535 0 0 65535 -0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 65535 65535 0 0 65535 0 65535 65535 0 0 65535 0 0 0 -0 0 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 -0 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/hd.xpm b/gpxe/contrib/ppmtoansi/demo/hd.xpm deleted file mode 100644 index 280c7abc..00000000 --- a/gpxe/contrib/ppmtoansi/demo/hd.xpm +++ /dev/null @@ -1,30 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"17 16 7 1", -/* colors */ -"` c #000000", -"a c #00FFFF", -"b c #00FF00", -"c c #FF00FF", -"d c #FF0000", -"e c #FFFF00", -"f c #0000FF", -/* pixels */ -"`````````````````", -"ddddddddddddd````", -"dbbbbbbbbbbbddd``", -"dbccccbccccbdeed`", -"dbccccbcbbbbdeed`", -"dbcbbbbcbbbbdeed`", -"dbcbbbbccccbded``", -"dbbbbbbbbbbbddfff", -"dddddddddddddaaff", -"`faddddddddaaafaf", -"ffffffffffffffaaf", -"faaaaaaaaaaaafaaf", -"faaaaaafffffafaf`", -"faaaaaaaaaaaaff``", -"ffffffffffffff```", -"`````````````````" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/ibmmap.ppm b/gpxe/contrib/ppmtoansi/demo/ibmmap.ppm deleted file mode 100644 index 648676e4..00000000 --- a/gpxe/contrib/ppmtoansi/demo/ibmmap.ppm +++ /dev/null @@ -1,11 +0,0 @@ -P3 -8 1 -255 - 0 0 0 -255 0 0 - 0 255 0 - 0 0 255 -255 255 0 -255 0 255 - 0 255 255 -255 255 255 diff --git a/gpxe/contrib/ppmtoansi/demo/ibmmap.xpm b/gpxe/contrib/ppmtoansi/demo/ibmmap.xpm deleted file mode 100644 index 06d4d990..00000000 --- a/gpxe/contrib/ppmtoansi/demo/ibmmap.xpm +++ /dev/null @@ -1,16 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"8 1 8 1", -/* colors */ -"` c #000000", -"a c #00FFFF", -"b c #00FF00", -"c c #FF00FF", -"d c #FF0000", -"e c #FFFFFF", -"f c #FFFF00", -"g c #0000FF", -/* pixels */ -"`dbgfcae" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/linux-logo.ansi b/gpxe/contrib/ppmtoansi/demo/linux-logo.ansi Binary files differdeleted file mode 100644 index 165f834b..00000000 --- a/gpxe/contrib/ppmtoansi/demo/linux-logo.ansi +++ /dev/null diff --git a/gpxe/contrib/ppmtoansi/demo/linux-logo.ppm b/gpxe/contrib/ppmtoansi/demo/linux-logo.ppm deleted file mode 100644 index 18604b44..00000000 --- a/gpxe/contrib/ppmtoansi/demo/linux-logo.ppm +++ /dev/null @@ -1,552 +0,0 @@ -P3 -52 61 -65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -65535 65535 65535 0 0 0 0 0 0 65535 65535 65535 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 0 65535 65535 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 65535 65535 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 0 0 65535 0 0 0 0 0 65535 0 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 0 0 65535 0 0 65535 -0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 0 0 0 -0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535 -0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 0 0 65535 -65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 0 0 0 0 65535 0 0 65535 -0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 65535 0 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 65535 65535 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 0 0 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 65535 0 0 -65535 0 0 65535 0 0 65535 65535 0 65535 0 0 65535 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 65535 0 0 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 65535 diff --git a/gpxe/contrib/ppmtoansi/demo/linux-logo.xpm b/gpxe/contrib/ppmtoansi/demo/linux-logo.xpm deleted file mode 100644 index fd2dd671..00000000 --- a/gpxe/contrib/ppmtoansi/demo/linux-logo.xpm +++ /dev/null @@ -1,73 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"52 61 5 1", -/* colors */ -"` c #000000", -"a c #FF0000", -"b c #FFFFFF", -"c c #FFFF00", -"d c #0000FF", -/* pixels */ -"dddddddddddddddddddddd```````ddddddddddddddddddddddd", -"dddddddddddddddddddd```````````ddddddddddddddddddddd", -"ddddddddddddddddddd`````````````dddddddddddddddddddd", -"dddddddddddddddddd```````````````ddddddddddddddddddd", -"ddddddddddddddddd`````````````````dddddddddddddddddd", -"ddddddddddddddddd`````````````````dddddddddddddddddd", -"ddddddddddddddddd``````````````````ddddddddddddddddd", -"ddddddddddddddddd``````````````````ddddddddddddddddd", -"ddddddddddddddddd``````````````````ddddddddddddddddd", -"ddddddddddddddddd``bb`````bbbb`````ddddddddddddddddd", -"ddddddddddddddddd``bbb```bbbbb`````ddddddddddddddddd", -"ddddddddddddddddd`b``b```bb``bb````ddddddddddddddddd", -"ddddddddddddddddd`b``````b````b````ddddddddddddddddd", -"ddddddddddddddddd`````cccc````b````ddddddddddddddddd", -"ddddddddddddddddd``b`cccccca`b``````dddddddddddddddd", -"ddddddddddddddddd``acccccccccc``````dddddddddddddddd", -"ddddddddddddddddd``cccccccccccc`````dddddddddddddddd", -"ddddddddddddddddd``ccccccccccca`````dddddddddddddddd", -"ddddddddddddddddd```ccccccaccc``````dddddddddddddddd", -"ddddddddddddddddd``bacccaccccbb``````ddddddddddddddd", -"ddddddddddddddddd``bbacccacbbbb```````dddddddddddddd", -"ddddddddddddddddd``bbbaaccbbbbbb``````dddddddddddddd", -"dddddddddddddddd```bbbbbbbbbbbbb```````ddddddddddddd", -"ddddddddddddddd```bbbbbbbbbbbbbbb``````ddddddddddddd", -"dddddddddddddd```bbbbbbbbbbbbbbbb```````dddddddddddd", -"dddddddddddddd```bbbbbbbbbbbbbbbbb```````ddddddddddd", -"ddddddddddddd```bbbbbbbbbbbbbbbbbb````````dddddddddd", -"dddddddddddd````bbbbbbbbbbbbbbbbbb````````dddddddddd", -"dddddddddddd````bbbbbbbbbbbbbbbbbbb````````ddddddddd", -"ddddddddddd````bbbbbbbbbbbbbbbbbbbb`````````dddddddd", -"ddddddddddd````bbbbbbbbbbbbbbbbbbbbb````````dddddddd", -"ddddddddddd```bbbbbbbbbbbbbbbbbbbbbb````````dddddddd", -"dddddddddd````bbbbbbbbbbbbbbbbbbbbbbb````````ddddddd", -"dddddddddd```bbbbbbbbbbbbbbbbbbbbbbbb````````ddddddd", -"ddddddddd````bbbbbbbbbbbbbbbbbbbbbbbb````````ddddddd", -"ddddddddd````bbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"ddddddddd```bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"dddddddd````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"ddddddd`````bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"ddddddd``c``bbbbbbbbbbbbbbbbbbbbbbbbb`````````dddddd", -"dddddddcccc``bbbbbbbbbbbbbbbbbbbbbbcc`````````dddddd", -"dddddddccccc``bbbbbbbbbbbbbbbbbbbbcccc```````cdddddd", -"ddddddccccccc``bbbbbbbbbbbbbbbbbbbccca``````ccaddddd", -"dddddcccccccca``bbbbbbbbbbbbbbbbbbccca`````cccaddddd", -"dacccccccccccc```bbbbbbbbbbbbbbbbbccccaa`aaccccddddd", -"acccccccccccccc````bbbbbbbbbbbbbbbcccccccccccccadddd", -"acccccccccccccc````bbbbbbbbbbbbbbbccccccccccccccdddd", -"accccccccccccccc````bbbbbbbbbbbbbbaccccccccccccccadd", -"daccccccccccccccc``bbbbbbbbbbbbbb``ccccccccccccccccd", -"daccccccccccccccccbbbbbbbbbbbbbb``accccccccccccccccc", -"acccccccccccccccccbbbbbbbbbbbbb```accccccccccccccccd", -"acccccccccccccccccabbbbbbbbbb`````accccccccccccccadd", -"dacccccccccccccccca``bbbb`````````acccccccccccccdddd", -"dacccccccccccccccca```````````````acccccccccccaddddd", -"ddaacccccccccccccca```````````````acccccccccaddddddd", -"ddddddaaaacccccccaddd```````````dddaccccccaddddddddd", -"ddddddddddaaaaaaaddddddddddddddddddaaacaaddddddddddd", -"ddddddddddddddadddddddddddddddddddddaaaadddddddddddd", -"dddddddddddddddddddddddddddddddddddddddddddddddddddd" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/make-ansi.sh b/gpxe/contrib/ppmtoansi/demo/make-ansi.sh deleted file mode 100755 index 16d7b98d..00000000 --- a/gpxe/contrib/ppmtoansi/demo/make-ansi.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -xpmtoppm <linux-logo.xpm >linux-logo.ppm -../ppmtoansi -b 0/0/255 -y 10 -t 0/0/0:4 linux-logo.ppm >linux-logo.ansi -xpmtoppm <etherboot.xpm >etherboot.ppm -../ppmtoansi -b 0/0/0 etherboot.ppm >etherboot.ansi -xpmtoppm <text.xpm >text.ppm -../ppmtoansi -b 0/0/0 -x 10 text.ppm >text.ansi -xpmtoppm <x.xpm >x.ppm -../ppmtoansi -b 0/0/0 -x 8 x.ppm >x.ansi -xpmtoppm <dos.xpm >dos.ppm -../ppmtoansi -b 0/0/0 -x 8 dos.ppm >dos.ansi -xpmtoppm <hd.xpm >hd.ppm -../ppmtoansi -b 0/0/0 -x 8 hd.ppm >hd.ansi -xpmtoppm <floppy.xpm >floppy.ppm -../ppmtoansi -b 0/0/0 -x 8 floppy.ppm >floppy.ansi -xpmtoppm <flash.xpm >flash.ppm -../ppmtoansi -b 0/0/0 -x 11 flash.ppm >flash.ansi diff --git a/gpxe/contrib/ppmtoansi/demo/text.ansi b/gpxe/contrib/ppmtoansi/demo/text.ansi Binary files differdeleted file mode 100644 index bbe7998a..00000000 --- a/gpxe/contrib/ppmtoansi/demo/text.ansi +++ /dev/null diff --git a/gpxe/contrib/ppmtoansi/demo/text.ppm b/gpxe/contrib/ppmtoansi/demo/text.ppm deleted file mode 100644 index c6f87610..00000000 --- a/gpxe/contrib/ppmtoansi/demo/text.ppm +++ /dev/null @@ -1,51 +0,0 @@ -P3 -13 16 -65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 -0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 -0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 -0 0 65535 65535 65535 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 0 -65535 65535 0 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 0 -65535 65535 0 65535 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 -65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 65535 -0 0 0 -0 0 0 0 0 0 65535 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 65535 0 0 65535 0 0 0 -0 0 0 -0 0 0 65535 65535 0 65535 65535 0 65535 0 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 0 0 0 0 65535 65535 65535 0 -0 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -65535 0 0 -65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 65535 -65535 65535 65535 65535 65535 65535 65535 65535 0 65535 65535 0 65535 65535 0 65535 65535 0 -0 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0 -0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/text.xpm b/gpxe/contrib/ppmtoansi/demo/text.xpm deleted file mode 100644 index 5261b962..00000000 --- a/gpxe/contrib/ppmtoansi/demo/text.xpm +++ /dev/null @@ -1,28 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"13 16 5 1", -/* colors */ -"` c #000000", -"a c #FF0000", -"b c #FFFFFF", -"c c #FFFF00", -"d c #0000FF", -/* pixels */ -"`````ddd`````", -"````ddddd````", -"````dbdbd````", -"````dccdd````", -"````dccad````", -"`````bbbdd```", -"```dbbbbdd```", -"```dbbbbbdd``", -"``dbbbbbbdd``", -"``dbbbbbbddd`", -"``abbbbbbdd``", -"`ccabbbbbadc`", -"ccccbbbbcccca", -"cccccbbbcccc`", -"```aa````aa``", -"`````````````" -}; diff --git a/gpxe/contrib/ppmtoansi/demo/x.ansi b/gpxe/contrib/ppmtoansi/demo/x.ansi deleted file mode 100644 index e2844b34..00000000 --- a/gpxe/contrib/ppmtoansi/demo/x.ansi +++ /dev/null @@ -1 +0,0 @@ -[8;1;4-$[23;1;1- [9;2;4-$[22;2;1- [10;3;4-$[21;3;1- [11;4;4-$[20;4;1- [12;5;4-$[19;5;1- [13;6;4-$[18;6;1- [14;7;2-$[17;7;2-$[14;8;1- [16;8;4-$[13;9;1- [17;9;4-$[12;10;1- [18;10;4-$[11;11;1- [19;11;4-$[10;12;1- [20;12;4-$[9;13;1- [21;13;4-$
\ No newline at end of file diff --git a/gpxe/contrib/ppmtoansi/demo/x.ppm b/gpxe/contrib/ppmtoansi/demo/x.ppm deleted file mode 100644 index 53e5bcfc..00000000 --- a/gpxe/contrib/ppmtoansi/demo/x.ppm +++ /dev/null @@ -1,51 +0,0 @@ -P3 -17 16 -65535 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 -0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 0 0 65535 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 65535 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 65535 0 0 -65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 65535 0 0 -65535 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 -65535 0 0 65535 0 0 65535 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -65535 0 0 65535 0 0 65535 0 0 65535 0 0 0 0 0 -0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 65535 0 0 65535 0 0 65535 0 0 65535 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/gpxe/contrib/ppmtoansi/demo/x.xpm b/gpxe/contrib/ppmtoansi/demo/x.xpm deleted file mode 100644 index d0695270..00000000 --- a/gpxe/contrib/ppmtoansi/demo/x.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"17 16 2 1", -/* colors */ -"` c #000000", -"a c #FF0000", -/* pixels */ -"`````````````````", -"aaaa```````````a`", -"`aaaa`````````a``", -"``aaaa```````a```", -"```aaaa`````a````", -"````aaaa```a`````", -"`````aaaa`a``````", -"``````aa`aa``````", -"``````a`aaaa`````", -"`````a```aaaa````", -"````a`````aaaa```", -"```a```````aaaa``", -"``a`````````aaaa`", -"`a```````````aaaa", -"`````````````````", -"`````````````````" -}; diff --git a/gpxe/contrib/ppmtoansi/ppmtoansi.c b/gpxe/contrib/ppmtoansi/ppmtoansi.c deleted file mode 100644 index 71d95cba..00000000 --- a/gpxe/contrib/ppmtoansi/ppmtoansi.c +++ /dev/null @@ -1,235 +0,0 @@ -#include <getopt.h> -#include <stdio.h> -#include <stdlib.h> - -static int palette[8][3] = { -/* black, red, green, yellow, */ - { 0, 0, 0},{255, 0, 0},{ 0,255, 0},{255,255, 0}, - { 0, 0,255},{255, 0,255},{ 0,255,255},{255,255,255}}; -/* blue, magenta, cyan, white */ - -static struct trans { - struct trans *next; - int idx,r,g,b; -} *trans = NULL; - -static int skipcomment(FILE *fp) -{ - int ch; - - for (;;) { - ch = getc(fp); - if (ch != '#') - return(ch); - while (ch != '\n' && ch != EOF) - ch = getc(fp); } -} - -static int readentry(FILE *fp,int format,int depth) -{ - int ch,i = 0; - - if (format == '3') { - while ((ch = getc(fp)) == ' ' || ch == '\t' || ch == '\r' || ch == '\n'); - if (ch < '0' || ch > '9') { - error: - fprintf(stderr,"Format error in input file\n"); - exit(1); } - for (; ch >= '0' && ch <= '9'; ch = getc(fp)) - i = 10*i + ch - '0'; } - else { - if ((i = getc(fp)) > depth || i < 0) - goto error; } - return((i*256)/(depth+1)); -} - -static void packpixel(char *data,int c) -{ - int i = 0, n = 0; - - while (c--) { - i = (i << 3) | (*data++ & 0x7); - if ((n += 3) >= 8) - putchar((i >> (n -= 8)) & 0xFF); } - if (n) - putchar(i << (8 - n)); - return; -} - -static int dg(int i) -{ - int d; - - for (d = 0; i; d++, i /= 10); - return(d); -} - -static char *i2s(char *buf,int i) -{ -/* if (!i) - *buf = '\000'; - else*/ - sprintf(buf,"%d",i); - return(buf); -} - -static void flushdata(int x,int y,int c,char *data) -{ - char b1[10],b2[10],b3[10],b4[10]; - int i,j,rle,v; - - for (i = j = v = 0; i < c; ) { - for (rle = 0; i+rle < c && data[i] == data[i+rle]; rle++); - if (rle > (i != j ? (v ? 4 : 6) : 0) + - ((v || (i != j)) ? 4+dg(rle)+dg(data[i]) - : 6+dg(x+i)+dg(y)+dg(rle)+dg(data[i]))) { - if (i != j) { - if (v) - printf("[%s-",i2s(b1,i-j)); - else - printf("[%s;%s;%s-",i2s(b1,x+j),i2s(b2,y),i2s(b3,i-j)); - packpixel(data+j,i-j); } - if (v++ || (i != j)) - printf("[%s;%s+",i2s(b1,rle),i2s(b2,data[i])); - else - printf("[%s;%s;%s;%s+",i2s(b1,x+i),i2s(b2,y), - i2s(b3,rle),i2s(b4,data[i])); - j = i += rle; } - else - i++; } - if (j != c) { - if (v) - printf("[%s-",i2s(b1,c-j)); - else - printf("[%s;%s;%s-",i2s(b1,x+j),i2s(b2,y),i2s(b3,c-j)); - packpixel(data+j,c-j); } - return; -} - -int main(int argc,char *argv[]) -{ - extern int optind; - extern char *optarg; - FILE *infile = NULL; - int ch,i,j,dist,idx; - int format,width,height,depth; - int bg = 0,bgred = 0,bggreen = 0,bgblue = 0; - int xoffset = 0,yoffset = 0; - int w,h,r,g,b,c; - struct trans *tp; - char *buf; - - while ((i = getopt(argc,argv,"b:t:x:y:")) >= 0) switch(i) { - case 'b': - bg++; - for (i = bgred = 0; optarg[i] >= '0' && optarg[i] <= '9'; - bgred = 10*bgred + optarg[i++] - '0'); - if (optarg[i++] != '/') - goto usage; - for (bggreen = 0; optarg[i] >= '0' && optarg[i] <= '9'; - bggreen = 10*bggreen + optarg[i++] - '0'); - if (optarg[i++] != '/') - goto usage; - for (bgblue = 0; optarg[i] >= '0' && optarg[i] <= '9'; - bgblue = 10*bgblue + optarg[i++] - '0'); - if (optarg[i]) - goto usage; - break; - case 't': - if ((tp = malloc(sizeof(struct trans))) == NULL) - goto usage; - for (i = tp->r = 0; optarg[i] >= '0' && optarg[i] <= '9'; - tp->r = 10*tp->r + optarg[i++] - '0'); - if (optarg[i++] != '/') - goto usage; - for (tp->g = 0; optarg[i] >= '0' && optarg[i] <= '9'; - tp->g = 10*tp->g + optarg[i++] - '0'); - if (optarg[i++] != '/') - goto usage; - for (tp->b = 0; optarg[i] >= '0' && optarg[i] <= '9'; - tp->b = 10*tp->b + optarg[i++] - '0'); - if (optarg[i++] != ':') - goto usage; - if (optarg[i] == '-') { - j = -1; i++; } - else j = 1; - for (tp->idx = 0; optarg[i] >= '0' && optarg[i] <= '9'; - tp->idx = 10*tp->idx + optarg[i++] - '0'); - tp->idx *= j; - if (tp->idx < -1 || tp->idx >= 8) - goto usage; - if (optarg[i]) - goto usage; - tp->next = trans; - trans = tp; - break; - case 'x': - for (i = xoffset = 0; optarg[i] >= '0' && optarg[i] <= '9'; - xoffset = 10*xoffset + optarg[i++] - '0'); - if (optarg[i]) - goto usage; - break; - case 'y': - for (i = yoffset = 0; optarg[i] >= '0' && optarg[i] <= '9'; - yoffset = 10*yoffset + optarg[i++] - '0'); - if (optarg[i]) - goto usage; - break; - default: - usage: - fprintf(stderr,"Usage: %s [-b r/g/b] [-t r/g/b:idx] " - "[-x offset] [-y offset] [ppmfile]\n",argv[0]); - exit(1); } - if (argc-optind == 0) - infile = stdin; - else if (argc-optind == 1) - infile = fopen(argv[optind],"r"); - if (!infile) - goto usage; - if ((ch = skipcomment(infile)) != 'P' || - ((format = getc(infile)) != '3' && format != '6') || - ((ch = getc(infile)) != '\n' && ch != '\r' && getc(infile) != '\n')) - goto usage; - for (width = 0; (ch = skipcomment(infile)) >= '0' && ch <= '9'; - width = 10*width + ch - '0'); - while (ch == ' ') ch = getc(infile); - for (height = 0; ch >= '0' && ch <= '9'; ch = getc(infile)) - height = 10*height + ch - '0'; - if (ch != '\n' && ch != '\r' && getc(infile) != '\n') - goto usage; - for (depth = 0; (ch = skipcomment(infile)) >= '0' && ch <= '9'; - depth = 10*depth + ch - '0'); - if (ch != '\n' && ch != '\r' && getc(infile) != '\n') - goto usage; - if (!width || !height || !depth /* || depth > 255 */) - goto usage; - if ((buf = malloc(width)) == NULL) - goto usage; - for (h = 0; h < height; h++) { - for (w = c = 0; w < width; w++) { - r = readentry(infile,format,depth); - g = readentry(infile,format,depth); - b = readentry(infile,format,depth); - idx = 255; - if (bg && bgred == r && - bggreen == g && bgblue == b) - idx = -1; - else for (tp = trans; tp; tp = tp->next) - if (tp->r == r && tp->g == g && tp->b == b) { - idx = tp->idx; - break; } - if (idx == 255) - for (idx = -1, dist = 3*255*255, i = 8; i--;) - if ((j = (r-palette[i][0])*(r-palette[i][0]) + - (g-palette[i][1])*(g-palette[i][1]) + - (b-palette[i][2])*(b-palette[i][2])) < dist) { - dist = j; idx = i; } - if (idx >= 0) - buf[c++] = idx; - else if (c) { - flushdata(w-c+xoffset,h+yoffset,c,buf); - c = 0; } } - if (c) - flushdata(w-c+xoffset,h+yoffset,c,buf); } - exit(0); -} diff --git a/gpxe/contrib/ppmtoansi/ppmtoansi.man b/gpxe/contrib/ppmtoansi/ppmtoansi.man deleted file mode 100644 index b19f9795..00000000 --- a/gpxe/contrib/ppmtoansi/ppmtoansi.man +++ /dev/null @@ -1,120 +0,0 @@ -.TH PPMTOANSI 1 "January 12, 1997" -.SH NAME -ppmtoansi \- Graphics Conversion Program For Extended ANSI Escape Codes -.SH SYNOPSIS -.B ppmtoansi -[ -.SM \-b -r/g/b ] [ -.SM \-t -r/g/b:idx] [ -.SM \-x -<xoffset> ] [ -.SM \-y -<yoffset> ] [ -<filename> ] -.SH DESCRIPTION -.I ppmtoansi -converts input files in -.IR ppm (5) -format to escape sequences that are understood by -.IR etherboot . -This allows for displaying icons and logos on the BOOT-Prom's splash -screen. -.PP -If no input file is specified, data is read from -.IR standard -.IR input . -All output is send to -.IR standard -.IR output , -error messages go to -.IR standard -.IR error . -.I ppmtoansi -tries to do some compression and minimizes the output filesize. -.SH OPTIONS -.TP -.B \-b -Specifies the -.IR red , -.IR green , and -.IR blue -intensities for the background color. This information is -used for providing a shape mask. All values are in the range from 0 to -255. -.TP -.B \-t -Allows for explicitly providing a translation between color values and -color indices. The indices are in the range 0 to 7 and conform to the -standard -.IR ANSI -.IR colorcodes . -.RS -.PP -0 black 4 blue -.PP -1 red 5 magenta -.PP -2 green 6 cyan -.PP -3 yellow 7 white -.PP -If no translations apply, -.IR ppmtoansi -will automatically select the color that is closest. -.RE -.TP -.B \-x -Specify an X offset relative to the current text cursor position. -.TP -.B \-y -Specify an Y offset relative to the current text cursor position. -.SH FILE FORMAT -.IR ppmtoansi -uses these extensions to the standard -.B ANSI escape -.BR codes . -.TP -.B <esc>[a;b;c;d+<data> -Draw pixel data. Use one byte per pixel. Colors are encoded as shown -above. In text mode, graphics is approximated by outputting suitable -characters. Parameters differ depending on the number of parameters -passed: -.RS -.TP -.B cnt -.IR cnt -data bytes follow. They will be drawn to the right of the last -graphics position. -.TP -.B rle;col -The next -.IR rle -pixels have the value -.IR col . -They will be drawn to the right of the last graphics position. No data -bytes follow. -.TP -.B x;y;cnt -.IR cnt -data bytes follow. They will be drawn relative to the top left corner -of the text cursor with an offset of -.RI ( x / y ). -.TP -.B x;y;rle;col -the next -.IR rle -pixels have the value -.IR col . -They will be drawn relative to the top left corner of the text cursor -with an offset of -.RI ( x / y ). -No data bytes follow. -.RE -.TP -.B <esc>[a;b;c;d\-<data> -same as above, but pack pixels into three bits. The first pixel is -stored in the three most significant bits of the first data byte. -.SH "SEE ALSO" -ppm(5), mknbi-linux(8), mknbi-dos(8). diff --git a/gpxe/contrib/rom-scan/Makefile b/gpxe/contrib/rom-scan/Makefile deleted file mode 100644 index 637404ad..00000000 --- a/gpxe/contrib/rom-scan/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -CPPFLAGS = -LDLIBS = -CFLAGS = -pipe -g -O2 -Wall -LDFLAGS = -pipe -CC = gcc -LD = gcc -# Some "black" magic to determine optimal compiler flags for target -# architecture -TARGET_ARCH:= $(shell if [ \! -r .compile-options ] ; then ( \ - cpu=`grep cpu /proc/cpuinfo 2>&1 |head -1| \ - cut -d : -f 2-| sed -e 's/ //g'`; \ - if [ x"$$cpu" = x"" ] ; then \ - echo -fno-strength-reduce; \ - else if [ "$$cpu" = "386" ] ; then \ - echo -m386 -fno-strength-reduce; \ - else if [ "$$cpu" = "486" ] ; then \ - echo -m486 -fno-strength-reduce; \ - else if [ "$$cpu" = "Alpha" ] ; then \ - echo -fno-strength-reduce; \ - else echo main\(\)\{\} >.compile-options.c; \ - if gcc -mpentium -o .compile-options.o -c \ - .compile-options.c &>/dev/null; then \ - echo -mpentium -fstrength-reduce; \ - else if gcc -m486 -malign-functions=2 -malign-jumps=2 \ - -malign-loops=2 -o .compile-options.o -c \ - .compile-options.c &>/dev/null; then \ - echo -n -m486 -malign-functions=2 -malign-jumps=2; \ - echo ' '-malign-loops=2 -fno-strength-reduce; \ - else echo -m486; \ - fi;fi;fi;fi;fi;fi) > .compile-options; \ - rm -f .compile-options.c .compile-options.o; \ - fi; cat .compile-options) -ASFLAGS = $(TARGET_ARCH) - -OBJS = rom-scan.o - -############################################################################## - -ifeq (.depend,$(wildcard .depend)) -all: rom-scan -include .depend -else -all: depend - @$(MAKE) all -endif - -############################################################################## - -rom-scan: $(OBJS) - -############################################################################## - -clean: - $(RM) *~ *.o *.dvi *.log *.aux *yacc.tab.[ch] *yacc.output *lex.[co] \ - *.dat .depend .tmp_depend .compile-options* - strip rom-scan >&/dev/null || true - -############################################################################## - -depend: - for i in *.c;do $(CPP) $(CPPFLAGS) -MM $$i;done >.tmp_depend - mv .tmp_depend .depend - - diff --git a/gpxe/contrib/rom-scan/rom-scan.c b/gpxe/contrib/rom-scan/rom-scan.c deleted file mode 100644 index c5e48299..00000000 --- a/gpxe/contrib/rom-scan/rom-scan.c +++ /dev/null @@ -1,115 +0,0 @@ -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#ifndef __TURBOC__ -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> -#endif - -#ifdef __TURBOC__ -#define HUGE huge -#else -#define HUGE -#endif - -#define ROMSTART 0xC8000 -#define ROMEND 0xE8000 -#define ROMINCREMENT 0x00800 -#define ROMMASK 0x03FFF - -#ifndef MAP_FAILED -#define MAP_FAILED ((void *)(long long)-1) -#endif - -typedef struct Images { - struct Images *next; - long start; - long size; -} Images; - -static void rom_scan(const unsigned char HUGE *rom,long offset,long len) -{ - static Images *images = NULL; - Images *ptr; -/* The assignments to dummy are to overcome a bug in TurboC */ - long dummy, size; - int chksum; - long i; - - if (rom[offset] != 0x55 || rom[dummy = offset+1] != 0xAA) - return; - size = (long)rom[dummy = offset+2]*512L; - printf("Found ROM header at %04lX:0000; " - "announces %ldk image (27C%02d EPROM)\n", - offset/16,(size+512)/1024, - size <= 1024 ? 8 : - size <= 2048 ? 16 : - size <= 4096 ? 32 : - size <= 8192 ? 64 : - size <= 16384 ? 128 : - size <= 32768 ? 256 : - size <= 65536 ? 512 : 11); - if (offset & ROMMASK) - printf(" This is a unusual position; not all BIOSs might find it.\n" - " Try to move to a 16kB boundary.\n"); - if (size > len) { - printf(" This image extends beyond %04X:0000. " - "It clashes with the system BIOS\n", - ROMEND/16); - size = len; } - for (chksum=0, i = size; i--; chksum += rom[dummy = offset+i]); - if (chksum % 256) - printf(" Checksum does not match. This image is not active\n"); - ptr = malloc(sizeof(Images)); - ptr->next = images; - ptr->start = offset; - ptr->size = size; - images = ptr; - for (ptr = ptr->next; ptr != NULL; ptr = ptr->next) { - for (i = 0; i < size && i < ptr->size; i++) - if (rom[dummy = ptr->start+i] != rom[dummy = offset+i]) - break; - if (i > 32) { - printf(" Image is identical with image at %04lX:0000 " - "for the first %ld bytes\n", - ptr->start/16,i); - if (i >= 1024) - if (i == size) - printf(" this means that you misconfigured the EPROM size!\n"); - else - printf(" this could suggest that you misconfigured the " - "EPROM size\n"); - else - printf(" this is probably harmless. Just ignore it...\n"); } } - return; -} - -int main(void) -{ - long i; - unsigned char HUGE *rom; - -#ifndef __TURBOC__ - int fh; - if ((fh = open("/dev/kmem",O_RDONLY|O_SYNC)) < 0) { - fprintf(stderr,"Could not open \"/dev/kmem\": %s\n",0 );//strerror(errno)); - return(1); } - if ((rom = mmap(NULL,ROMEND-ROMSTART,PROT_READ,MAP_SHARED,fh, - ROMSTART)) == MAP_FAILED) { - fprintf(stderr,"Could not mmap \"/dev/kmem\": %s\n",0); //strerror(errno)); - close(fh); - return(1); } - close(fh); -#endif - for (i = ROMEND; (i -= ROMINCREMENT) >= ROMSTART; ) -#ifdef __TURBOC__ - rom_scan(0,i,ROMEND-i); -#else - rom_scan(rom-ROMSTART,i,ROMEND-i); - munmap(rom,ROMEND-ROMSTART); -#endif - return(0); -} diff --git a/gpxe/contrib/romid/pktdrv.bat b/gpxe/contrib/romid/pktdrv.bat deleted file mode 100644 index 058fd4e9..00000000 --- a/gpxe/contrib/romid/pktdrv.bat +++ /dev/null @@ -1,84 +0,0 @@ -@echo off
-if (%PKTDRV%)==(P) goto end
-A:\PKT\ROMID
-if (%ROMID%)==() goto select
-if (%ROMID%)==(NE) goto NE
-if (%ROMID%)==(WD) goto WD
-if (%ROMID%)==(3C509) goto 3C509
-if (%ROMID%)==(3C905B) goto 3C905B
-if (%ROMID%)==(EEPRO100) goto EEPRO100
-if (%PCIID%)==(10EC:8029) goto RTL8029
-if (%PCIID%)==(10EC:8139) goto RTL8139
-if (%PCIID%)==(11AD:0002) goto LITEON
-if (%PCIID%)==(1011:0009) goto DEC
-echo No Driver installed!
-goto end
-:select
-cls
-echo *** Select your network card.... ***
-echo.
-echo 1 -- Intel EtherExpress 100B PCI Adapter
-echo 2 -- 3Com 3C90X Etherlink III PCI Adapter
-echo 3 -- 3Com 3C5X9 Etherlink III ISA Adapter
-echo 4 -- NE2000 Novell ISA Adapter
-echo 5 -- Realtek 8029 PCI Adapter
-echo 6 -- Realtek 8139 PCI Adapter
-echo 7 -- SMC EliteUltra 8216 ISA Adapter
-echo 8 -- DEC21x4 Busmaster PCI Adapter
-echo 9 -- LiteOn PNIC Busmaster PCI Adapter
-echo.
-echo *** **************************** ***
-echo.
-choice /c123456789 /n Select:
-if errorlevel 9 goto LITEON
-if errorlevel 8 goto DEC
-if errorlevel 7 goto WD
-if errorlevel 6 goto RTL8139
-if errorlevel 5 goto RTL8029
-if errorlevel 4 goto NE
-if errorlevel 3 goto 3C509
-if errorlevel 2 goto 3C905B
-if errorlevel 1 goto EEPRO100
-goto end
-
-:EEPRO100
-A:\PKT\E100BPKT 0x60
-if errorlevel 0 goto ok
-goto end
-:NE
-A:\PKT\NE2000 0x60 11 0x0300
-if errorlevel 0 goto ok
-goto end
-:RTL8029
-A:\PKT\PCIPKT 0x60
-if errorlevel 0 goto ok
-goto end
-:RTL8139
-A:\PKT\RTSPKT 0x60
-if ERRORLEVEL 0 goto OK
-goto end
-:WD
-A:\PKT\SMC_WD 0x60
-if errorlevel 0 goto ok
-goto end
-:3C509
-A:\PKT\3C5X9PD 0x60
-if errorlevel 0 goto ok
-goto end
-:3C905B
-A:\PKT\3C90XPD 0x60
-if errorlevel 0 goto ok
-goto end
-:LITEON
-A:\PKT\FEPD 0x60
-if ERRORLEVEL 0 goto ok
-goto end
-:DEC
-A:\PKT\ETHPCI 0x60
-if ERRORLEVEL 0 goto ok
-goto end
-
-:ok
-SET PKTDRV=P
-:end
-
diff --git a/gpxe/contrib/romid/readme b/gpxe/contrib/romid/readme deleted file mode 100644 index 6c6c500a..00000000 --- a/gpxe/contrib/romid/readme +++ /dev/null @@ -1,8 +0,0 @@ -This simple utility has currently no correct error checking.
-If your environment space couldn't hold up the variables, the
-program breaks without an error message, so be sure to add a
-line similar to the following to your config.sys:
-SHELL=A:\COMMAND.COM A:\ /P/E:2048
-
-The batch is a sample which shows how it could be used for those
-one not familar with batch files and environment variables.
\ No newline at end of file diff --git a/gpxe/contrib/romid/romid.c b/gpxe/contrib/romid/romid.c deleted file mode 100644 index f6049bfd..00000000 --- a/gpxe/contrib/romid/romid.c +++ /dev/null @@ -1,124 +0,0 @@ -/* This little program is my try to provide information about the - EtherBoot rom via environment variables to a batch file. This - could be done better, I think, but it works... - The program compiles with Borland C 3.1; other versions not tested. - The C code for setting the environment variables I got from an - archive, it was written by Richard Marks <rmarks@KSP.unisys.COM>. - ROMID is written by Guenter Knauf <eflash@gmx.net> -*/ -#define VERSION "0.6" -#define VDATE "2003-08-24" - -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define ROMSTART 0xC8000 -#define ROMEND 0xE8000 -#define ROMINCREMENT 0x00800 -#define ROMMASK 0x03FFF - -int verbose = 0; - -int settheenv(char *symbol, char *val); - -static int rom_scan(const unsigned char huge *rom,long offset,long len) { - long size,i,j; - char symbol[16]; - char val[64]; - char romid[64]; - char *rptr; - - if (rom[offset] != 0x55 || rom[offset+1] != 0xAA) - return 0; - - size = (long)rom[offset+2]*512L; - if (verbose) { - printf("Found ROM header at %04lX:0000; announces %ldk image\n", offset/16,(size+512)/1024); - if (offset & ROMMASK) - printf(" This is a unusual position; not all BIOSs might find it.\n" - " Try to move to a 16kB boundary.\n"); - if (size > len) { - printf(" This image extends beyond %04X:0000. It clashes with the system BIOS\n", ROMEND/16); - size = len; - } - } - - for (i=0; i<64; i++) { - if (rom[offset+size-3-i] == 0xff) - break; - } - if (20<i && i<63) { - i--; - for (j=0; j<i; j++) - val[j] = rom[offset+size-3-i+j]; - val[i] = 0; - } else - return 0; - - if (strstr(val, "therboot") == NULL) - return 0; - - if (verbose) - printf("ROM Signature '%s'\n", val); - if ((rptr = strstr(val, "rom")) != NULL) { - for (i=1; i<4; i++) { - rptr--; - if (rptr[0] == 0x2E) - break; - } - i = 0; - while (!(rptr[0] == 0x20 || rptr < val)) { - i++; - rptr--; - } - rptr++; - i--; - strncpy(romid, rptr, i); - romid[i] = 0; - if (verbose) - printf("ROM Driver ID '%s'\n", romid); - strcpy(symbol, "ROMID"); - if (settheenv(symbol, romid)) - printf("Error setting evironment var %s with value %s\n", symbol, romid); - } else { - if (verbose) - printf("Couldnt find driver name!\n"); - return 0; - } - if (rom[offset+0x1C] == 'P' && rom[offset+0x1D] == 'C' && rom[offset+0x1E] == 'I') { - sprintf(val, "%02X%02X:%02X%02X", rom[offset+0x21], rom[offset+0x20], - rom[offset+0x23], rom[offset+0x22]); - if (verbose) - printf("ROM Vendor ID '%s'\n", val); - strcpy(symbol, "PCIID"); - if (settheenv(symbol, val)) - printf("Error setting evironment var %s with value %s\n", symbol, val); - } - return 1; -} - -/* **************** main stuff **************** */ -int main (int argc, char *argv[]) { - long i; - - printf("\nROM-ID for Etherboot v%s (c) G. Knauf %s\n", VERSION, VDATE); - if (argc > 1) { - /* parse input parameters */ - for (argc--, argv++; *argv; argc--, argv++) { - if ((strnicmp (*argv, "-", 1) == 0) || (strnicmp (*argv, "/", 1) == 0)) { - if ((strnicmp (*argv, "-V", 2) == 0) || (strnicmp (*argv, "/V", 2) == 0)) { - verbose = 1; - } else { - printf("Usage: %s [-v]\n"); - } - } - } - } - for (i = ROMEND; (i -= ROMINCREMENT) >= ROMSTART;) - if (rom_scan(0,i,ROMEND-i)) - break; - - return 0; -} diff --git a/gpxe/contrib/romid/setenvs.c b/gpxe/contrib/romid/setenvs.c deleted file mode 100644 index e18e399e..00000000 --- a/gpxe/contrib/romid/setenvs.c +++ /dev/null @@ -1,200 +0,0 @@ -/* subroutine to put a value string into an environment symbol. - Uses the controling command.com environment, not the programs. - This means that the env variable is set so other routines in - a .BAT file may use it. - - call: settheenv (char * symbol, char * val); - symbol is an asciiz string containing the env variable name, - val is an asciiz string containing the value to assign to this vbl. - - returns: 0 = OK, - 1 = failure. - failure is not unlikely. The env block may be full. Or on some - systems the env block might not be found - - SETENVS.C was written by Richard Marks <rmarks@KSP.unisys.COM>. -*/ - - -#include <stdio.h> -#include <dos.h> -#include <string.h> -#include <stdlib.h> - -typedef struct { - char fill1[0x0A]; - int *prev_term_handler; - int *prev_ctrl_c; - int *prev_crit_error; - char fill2[0x16]; - int envir_seg; -} psp; - -typedef struct { - char type; - int psp_segment; - int num_segments; - char fill[11]; - char arena_data; -} arena; - - -#define NORMAL_ATYPE 0x4D -#define LAST_ATYPE 0x5A - - -static arena * get_next_arena (arena * ap) { - return( MK_FP( FP_SEG(ap)+1+ap->num_segments, 0) ); -} - -/* returns 0 if passed pointer is to an arena, else returns 1 */ -static int is_valid_arena (arena * ap) { - arena * ap1; - if (ap->type == NORMAL_ATYPE && - (ap1=get_next_arena(ap))->type == NORMAL_ATYPE && - ( (ap1=get_next_arena(ap1))->type == NORMAL_ATYPE || - ap1->type == LAST_ATYPE) ) - return(0); - return (1); -} - - -static arena * get_first_arena () { -/* return pointer to the first arena. - * scan memory for a 0x4D on a segment start, - * see if this points to another two levels of arena - */ - arena * ap, * ap1; - int * temp; - int segment; - - for (segment=0; segment<_CS; segment++) { - ap = MK_FP(segment, 0); - if ( is_valid_arena (ap) == 0) return (ap); - } - return(NULL); -} /* end get_first_arena */ - - -static int is_valid_env (char * ad, int num_segs) { - char * base_ad; - base_ad = ad; - while ( (*ad) && (((ad-base_ad)>>4) < num_segs) ) { - if (strnicmp(ad, "COMSPEC=", 8)==0) return(0); - ad += strlen(ad) + 1; - } - return (1); -} - - -static arena * get_arena_of_environment () { -/* to get the arena of first environment block: - First get segment of COMMAND.COM from segment of previous critical err code. - Then scan all the arenas for an environment block with a matching PSP - segment */ - -arena * ap; -psp * pspp, * pspc; -unsigned int i, ccseg; - -/* set pspp to psp of this program */ -pspp = MK_FP(_psp,0); - -#ifdef DEBUG -printf("prog psp=%p\n",pspp); -#endif - -/* set pspc to psp of COMMAND.COM, back up a bit to get it if needed */ -ccseg = FP_SEG (pspp->prev_crit_error); -if ( (i=ccseg-32) < 60) i=60; - -while (ccseg>i) { - pspc = MK_FP (ccseg, 0); - if ( is_valid_arena((arena *) pspc) == 0) goto L1; - ccseg--; -} -return (NULL); - -L1: pspc = MK_FP (++ccseg, 0); -#ifdef DEBUG -printf("comm.com=%p\n",pspc); -#endif - -/* first see if env seg in command.com points to valid env block - if env seg is in a valid arena, then arena must point to this command.com - else assume env block is fabricated like for 4DOS, use 128 bytes */ - -ap = MK_FP (pspc->envir_seg-1, 0); -i = ap->num_segments; - -if (is_valid_arena (ap) == 0) { - if (ap->psp_segment != FP_SEG(pspc)) goto L2; -} else { - i = 9; -} - -if ( is_valid_env (&ap->arena_data, i) == 0 ) - return (ap); - -/* command.com did not so point, search thru all env blocks */ - -L2: -if ( (ap=get_first_arena()) != NULL ) { - while (ap->type != LAST_ATYPE) { -#ifdef DEBUG - printf("%p\n",ap); -#endif - if (ap->psp_segment == FP_SEG(pspc) && - is_valid_env (&ap->arena_data, ap->num_segments)==0 ) - return (ap); - - ap = get_next_arena(ap); - } -} return(NULL); -} /* end get_arena_of_environment */ - -/*****************************************************************************/ - -int settheenv(char * symbol, char * val) { -int total_size, - needed_size=0, - strlength; -char * sp, *op, *envir; -char symb_len=strlen(symbol); -char found=0; -arena * ap; - -strupr(symbol); - -/* first, can COMMAND.COM's envir block be found ? */ -if ( (ap=get_arena_of_environment()) == NULL) - return(1); - -/* search to end of the envir block, get sizes */ -total_size = 16 * ap->num_segments; -envir = &ap->arena_data; -op=sp=envir; -while (*sp) { - strlength = strlen(sp)+1; - if ( *(sp+symb_len)=='=' && - strnicmp(sp,symbol,symb_len)==0 ) - found=1; - else { - needed_size += strlength; - if (found) strcpy(op,sp); - op = &op[strlength]; - } - sp += strlength; -} -*op=0; -if (strlen(val) > 0) { - needed_size += 3 + strlen(symbol) + strlen(val); - if (needed_size > total_size) - return(1); /* could mess with environment expansion here */ - - strcpy(op, symbol); strcat(op, "="); strcat(op, val); - op += strlen(op)+1; - *op = 0; -} -return(0); -} /* end setheenv subroutine */ diff --git a/gpxe/contrib/smc9462tx-flash/Makefile b/gpxe/contrib/smc9462tx-flash/Makefile deleted file mode 100644 index dc5b3ff8..00000000 --- a/gpxe/contrib/smc9462tx-flash/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -GCC = gcc -KERNELDIR = ../linux-2.4.20 -KERNELSTYLE=-D__KERNEL__ -DCPU=__i386__ -DMODULE -INCLUDE_DIR=-I$(KERNELDIR)/include -I../include -I$(ROOTDIR)/include - -all: dp83820flash.o dp83820_write - -CFLAGS+=-O2 -Wall -fomit-frame-pointer -fno-strength-reduce -CFLAGS+=$(KERNELSTYLE) $(CDEBUG) $(INCLUDE_DIR) - -install: - -dp83820flash.o: dp83820flash.c - $(GCC) dp83820flash.c -o dp83820flash.o -c $(CFLAGS) - -dp83820_write: dp83820_write.c - $(GCC) $< -o $@ -Wall -O2 - -clean: - $(RM) *.o dp83820_write diff --git a/gpxe/contrib/smc9462tx-flash/README b/gpxe/contrib/smc9462tx-flash/README deleted file mode 100644 index 53501cb3..00000000 --- a/gpxe/contrib/smc9462tx-flash/README +++ /dev/null @@ -1,24 +0,0 @@ -This code was written by Dave Ashley for NXTV, Inc. It is released under -the terms of the GPL. The purpose is to let you write to the bootrom of -the SMC9462TX card. The assumption is that you've stuck an AT29C512 in the -socket. Note that the board has pins D5 + D6 reversed on the socket. Also -the socket only supplies 3.3V to the rom. Good luck trying to locate a -DIP programmable flash device that operates at 3.3V. What I do is to bend -pin 32 back and solder a wire directly from the 5V side of the 3.3V regulator -over to it. The dp83820's bootrom interface pins are all 5V logic tolerant. -However mod your board at your own risk, no warranty or guarantees are implied -or given!!! If you don't wire the 5V to the AT29C512, you can still read -the rom contents (it operates ok at 3.3V evidently) but you can't write to it -because the AT29C512 has a safety protection, it disables writes if the -power supply voltage drops below 3.8V. - -See the comments at the top of the 2 C files for more information. - -The Makefile needs to be hacked to build for your system. If you can't -figure it out you shouldn't be messing with this stuff anyway. - --Dave Ashley -Email address intentionally left out to avoid spam. -http://www.xdr.com/dash - -Mon Mar 8 13:55:34 PST 2004 diff --git a/gpxe/contrib/smc9462tx-flash/dp83820_write.c b/gpxe/contrib/smc9462tx-flash/dp83820_write.c deleted file mode 100644 index ab6e5662..00000000 --- a/gpxe/contrib/smc9462tx-flash/dp83820_write.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - DP83820 flash utility written by Dave Ashley for NXTV, Inc. - Copyright (C) 2004 by NXTV, Inc. - Written 20040219 by Dave Ashley. - - Currently only supports the AT29C512 - - This code is released under the terms of the GPL. No warranty. - - - THEORY: - This code uses the /proc/dp83820 file which is created by the - dp83820flash.o module. That file allows single byte reads + writes - to the bootrom. - -*/ - -#include <unistd.h> -#include <sys/io.h> -#include <stdio.h> -#include <unistd.h> -#include <sys/mman.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdlib.h> -#include <signal.h> - - -// SMC9462TX card has D5 + D6 on the bootrom socket reversed -int fixb(int val) -{ - return (val&~0x60) | ((val&0x20)<<1) | ((val&0x40)>>1); -} -int openit(void) -{ -int fd; - fd=open("/proc/dp83820",O_RDWR); - if(fd<0) - { - printf("Failed to open the /proc/dp83820 file to access the flashrom.\n"); - printf("Make sure you've done:\n"); - printf(" modprobe dp83820flash\n"); - exit(-1); - } - return fd; -} -void set(int addr, unsigned char val) -{ -unsigned char msg[3]; -int fd; - fd=openit(); - msg[0]=addr; - msg[1]=addr>>8; - msg[2]=val; - write(fd,msg,3); - close(fd); -} -int get(int addr) -{ -unsigned char msg[2]; -int fd; - fd=openit(); - msg[0]=addr; - msg[1]=addr>>8; - write(fd,msg,2); - read(fd,msg,1); - close(fd); - return msg[0]; -} - - -int getromsize(unsigned char *id) -{ - if(id[0]==0xbf && id[1]==0xb6) return 0x40000; - if(id[0]==0xc2 && id[1]==0xb0) return 0x40000; - if(id[0]==0x1f && id[1]==0x3d) return 0x10000; - return -1; -} - -#define MAXROMSIZE 0x200000 -unsigned char *buffer; - -int loadfile(char *name) -{ -int filefd; -int filesize; - filefd=open(name,O_RDONLY); - if(filefd<0) - { - printf("Couldn't open file %s\n",name); - return -1; - } - filesize=read(filefd,buffer,MAXROMSIZE); - close(filefd); - if(filesize<0) - { - printf("Error trying to read from file %s\n",name); - } - return filesize; -} - -void readbios(char *name,int len) -{ -int filefd; -int filesize=0; -unsigned char block[256]; -int i,j; - - filefd=open(name,O_WRONLY|O_TRUNC|O_CREAT,0644); - if(filefd<0) - { - printf("Couldn't create file %s for writing\n",name); - return; - } - for(i=j=0;i<len;++i) - { - block[j++]=get(i); - if(j<sizeof(block)) continue; - filesize+=write(filefd,block,j); - j=0; - } - close(filefd); - if(filesize!=len) - { - printf("Error during write of %s file\n",name); - return; - } - printf("BIOS contents saved to %s, $%x bytes\n",name,len); -} - -int verifybios(char *name,int len, int print) -{ -int filelen; -int i; -int same=0; - - filelen=loadfile(name); - for(i=0;i<filelen;++i) - if(get(i)!=buffer[i]) break; - if(i<filelen) - { - if(print) - printf("BIOS contents does not match file %s, from byte $%x\n", - name,i); - } else - { - if(print) - printf("BIOS contents match file %s for all of its $%x bytes\n", - name,i); - same=1; - } - return same; -} - -void writebios(char *name,int len,unsigned char *id) -{ -int i; -int p1,p2; -int sectorsize=128; - - if(len!=loadfile(name)) - { - printf("File size does not match expected ROM size\n"); - return; - } - if(0 && (id[0]!=0xbf || id[1]!=0xb6)) - { - printf("Don't know how to write this kind of flash device\n"); - return; - } - - printf("Erasing device\n"); - set(0x5555,fixb(0xaa)); - set(0x2aaa,fixb(0x55)); - set(0x5555,fixb(0x80)); - set(0x5555,fixb(0xaa)); - set(0x2aaa,fixb(0x55)); - set(0x5555,fixb(0x10)); - - for(;;) - { - printf(".");fflush(stdout); - usleep(250000); - if(get(0)==get(0) && get(0)==get(0)) - break; - } - printf("BIOS erased\n"); - - printf("Writing to BIOS\n"); - p1=-1; - for(i=0;i<len;++i) - { - p2=100*i/(len-1); - if(p2!=p1) - { - printf("\r%d%%",p1=p2); - fflush(stdout); - } - if(i%sectorsize==0) - { - set(0x5555,fixb(0xaa)); - set(0x2aaa,fixb(0x55)); - set(0x5555,fixb(0xa0)); - } - set(i,buffer[i]); - if(i%sectorsize==sectorsize-1) - while(get(0)!=get(0) || get(0)!=get(0)); - } - printf("\n"); -} - -void helptext(char *name) -{ - printf("USE: %s <options>\n",name); - printf(" -v <filename> = verify bios rom contents with file\n"); - printf(" -w <filename> = write to bios rom contents from file\n"); - printf(" -r <filename> = read from bios rom contents to file\n"); - printf(" -f = force erase/write even if contents already match\n"); - exit(0); -} - -int main(int argc,char **argv) -{ -int i; -int vals; -unsigned char id[4]; -char *filename=0; -char action=0; -int romsize; -int force=0; -int same; - - vals=0; - - if(argc<2) helptext(argv[0]); - for(i=1;i<argc;++i) - { - if(argv[i][0]!='-') - helptext(argv[0]); - switch(argv[i][1]) - { - case 'f': - force=1; - break; - case 'v': - case 'w': - case 'r': - action=argv[i][1]; - if(i+1<argc) - filename=argv[++i]; - else helptext(argv[0]); - break; - default: - helptext(argv[0]); - } - - } - - buffer=malloc(MAXROMSIZE); - if(!buffer) - { - printf("No memory available!\n"); - exit(-1); - } - - set(0x5555,fixb(0xaa)); // get into flash ID mode - set(0x2aaa,fixb(0x55)); - set(0x5555,fixb(0x90)); - - for(i=0;i<4;++i) id[i]=get(i); - - set(0x5555,fixb(0xaa)); // get out of flash ID mode - set(0x2aaa,fixb(0x55)); - set(0x5555,fixb(0xf0)); - usleep(10000); - - for(i=0;i<4;++i) - if(id[i]!=get(i)) break; - if(i==4) - { - printf("Could not read BIOS flashrom ID.\n"); - goto biosdone; - } - printf("ID %02x %02x\n",id[0],id[1]); - romsize=getromsize(id); - if(romsize<0) - { - printf("Unknown rom type\n"); - goto biosdone; - } - printf("romsize=$%x bytes\n",romsize); - if(action=='r') - readbios(filename,romsize); - if(action=='w') - { - if(!force) - same=verifybios(filename,romsize,0); - else - same=0; - if(!same) - writebios(filename,romsize,id); - } - if(action=='v' || action=='w') - verifybios(filename,romsize,1); - -biosdone: - - return 0; -} diff --git a/gpxe/contrib/smc9462tx-flash/dp83820flash.c b/gpxe/contrib/smc9462tx-flash/dp83820flash.c deleted file mode 100644 index 661c4291..00000000 --- a/gpxe/contrib/smc9462tx-flash/dp83820flash.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - Kernel module for the dp83820 flash write utility. This code was written - by Dave Ashley for NXTV, Inc. - Copyright 2004 by NXTV, Inc. - Written 20040219 by Dave Ashley. - - This code is released under the terms of the GPL. No warranty. - - THEORY: The dp83820 bootrom interface is flawed in that you can't - read or write a single byte at a time, and this is required in order - to write to flash devices like the AT29C512. So the workaround is - to use the chips ability to map into memory the bootrom, then the cpu - can directly do byte accesses. - - The problem is that a "feature" of the dp83820 is that when you map - in the bootrom, you conveniently lose access to the PCI registers. - So we need to do this in kernel space and wrap every access to the - bootrom within interrupt_disable/restore, in case a network interrupt - were to come in. - - This kernel module is very simple, it just creates a proc file - /proc/dp83820 - If you write 3 bytes to this file you are doing a write to the flashrom: - -Byte 1 2 3 - ALOW AHIGH DATA - - If you write 2 bytes to this file you are doing a read from the flashrom: -Byte 1 2 - ALOW AHIGH - Then the next read from the file will return a single byte of what - was at that location. - - You only get one shot at accessing the proc file, you need to then - close/open if you want to do another access. This could probably be - cleaned up pretty easily so more accesses can be done without having - to close/open the file. - -*/ - - -#include <linux/config.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/errno.h> -#include <linux/ioport.h> -#include <linux/interrupt.h> -#include <linux/pci.h> -#include <linux/spinlock.h> -#include <linux/proc_fs.h> -#include <linux/module.h> - - -#define PROCNAME "dp83820" - -struct pci_dev *mydev=0; -unsigned long loc; -unsigned char *addr=0; - -unsigned char lastread; - - -int my_read_proc(char *buf, char **start,off_t offset,int count, int *eof,void *data) -{ -int retval=0; - - if(count>0) - { - buf[0]=lastread; - retval=1; - } - - *eof=1; - - return retval; -} - -int my_write_proc(struct file *file, const char *buffer, unsigned long count, - void *data) -{ -unsigned char *msg; - -unsigned long flags; - - msg=(void *)buffer; - save_flags(flags); - cli(); - pci_write_config_dword(mydev, 0x30, loc | 1); - - switch(count) - { - case 2: - lastread=addr[msg[0] | (msg[1]<<8)]; - break; - case 3: - addr[msg[0] | (msg[1]<<8)] = msg[2]; - break; - } - pci_write_config_dword(mydev, 0x30, loc); - restore_flags(flags); - return count; -} - - -struct proc_dir_entry *de=0; - -int __init init_module(void) -{ -int found=0; - mydev=0; - pci_for_each_dev(mydev) - { - if(mydev->vendor==0x100b && mydev->device==0x0022) - { - found=1; - break; - } - } - if(!found) - { - printk("Could not find DP83820 network device\n"); - return ENODEV; - } - - de=create_proc_entry(PROCNAME,0,0); - if(!de) - return -1; - de->data=0; - de->read_proc=my_read_proc; - de->write_proc=my_write_proc; - - loc=mydev->resource[PCI_ROM_RESOURCE].start; - addr=ioremap_nocache(loc,0x10000); - - - return 0; -} - -void cleanup_module(void) -{ - if(de) - { - remove_proc_entry(PROCNAME,0); - de=0; - } - if(addr) - { - iounmap(addr); - addr=0; - } -} - diff --git a/gpxe/contrib/t2hproxy/README b/gpxe/contrib/t2hproxy/README deleted file mode 100644 index ce5e1e9b..00000000 --- a/gpxe/contrib/t2hproxy/README +++ /dev/null @@ -1,95 +0,0 @@ -T2hproxy - -This is a TFTP to HTTP proxy. To the TFTP client it looks like a TFTP -server. To the HTTP server it looks like a HTTP client. So you can store -your boot files on the HTTP server. Or even create them with a CGI -program. E.g. if you can get dhcpd to send a filename which has strings -representing attributes of the client, as determined from the DHCP -request, then you can get the CGI program to parse this and send the -appropriate image, which might even be synthesised. - -There are two versions of the proxy, in Perl and in Java. - -1. The Perl version. - -This is the original quick Perl hack conceived in a moment of madness. -:-) Perl is great for prototyping. - -To run it, you need Perl 5.8.0 or later and all the Perl modules listed -at the top of the program installed. Edit and install the xinetd config -file as /etc/xinetd.d/t2hproxy and restart xinetd. The prefix is the -string that is prepended to all filenames to form the URL requested from -the HTTP server. Remember you need the trailing / if the filenames don't -start with /. - -This is only a proof-of concept. It has these drawbacks at the moment: - -+ (I don't consider this a draback, but some may.) It's started from -xinetd because xinetd handles all the socket listening, IP address -checking, rate limiting, etc. - -+ It has no cache. Use a proxy to do the caching (there's a --proxy -option). This also takes care of fetching from outside a firewall. - -+ It reads the entire HTTP content into memory before serving. Ideally -it should stream it from the HTTP server to minimise memory usage. This -is a serious drawback for booting lots of clients. Each instance of the -server will consume an amount of memory equal to the size of image -loaded. - -+ If the HTTP server is at the end of a slow link there is a delay -before the first data block is sent. The client may timeout before -then. Another reason for streaming, as this allows the first block to -be sent sooner. A local cache primed with the images in advance may -help. Using the blocksize option helps here because this causes the -server to send the OACK to the client immediately before the data is -fetched and this prevents it from starting up another connection. - -+ The transfer size may not be obtainable from the HTTP headers in all -cases, e.g. a CGI constructed image. This matters for clients that need -the tsize extension, which is not supported at the moment. - -If I'm feeling masochistic I may write a Java version, which should take -care of the multi-threading and streaming. - -2. The Java version - -The main problem with the Perl version is that it does not stream the -HTTP input but sucks it all in at once. As mentioned, this causes a -delay as well as requiring memory to hold the image. I could fix this by -doing the polling on the HTTP socket myself instead of letting LWP do -it, but that's for later. Java has streaming facilities as well as -threading and is also somewhat portable. So I decided to be masochistic -and give it a go. But boy is Java bureaucratic. - -You will need a Java 1.4 JRE, because I use the java.nio classes; and -the commons-httpclient and commons-logging jars from the -jakarta.apache.org project. As I understand it, there are several ways -to get those jars on your classpath. One is to put it in the directory -where your java extensions jars are kept, normally -$JAVA_HOME/jre/lib/ext. But it may not be writable to you. Another is to -set your $CLASSPATH variable to have those jars in the path. A third is -to use the -cp option of the java interpreter, see the shell script -runT2hproxy for details. - -All the source is in one Java file. build.xml is a "Makefile" for ant to -compile and jar it. You should then edit runT2proxy.sh as required, then -start it. As with the Perl version, the prefix is what's prepended to -the filenames requested by the TFTP client, and the proxy is the -host:port string for the proxy if you are using one. On *ix you will -need root permission to listen on ports below 1024 (TFTP is at 69 UDP by -default). - -Currently it logs to stderr, but you can change this by downloading and -installing the log4j jar from jakarta.apache.org and instructing -commons-logging to use that, with a command line property setting and a -property file. Destinations could be syslog, or a file, or an event -logger, or...; it's supposedly very flexible. - -3. Licensing - -All this code is GPLed. For details read the file COPYING found in the -Etherboot top directory since it currently bundled with Etherboot. I -don't see the point of including COPYING in every directory. - -Ken Yap, October 2003 diff --git a/gpxe/contrib/t2hproxy/T2hproxy.java b/gpxe/contrib/t2hproxy/T2hproxy.java deleted file mode 100644 index cfe1d1a7..00000000 --- a/gpxe/contrib/t2hproxy/T2hproxy.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * TFTP to HTTP proxy in Java - * - * Copyright Ken Yap 2003 - * Released under GPL2 - */ -import java.io.IOException; -import java.io.InputStream; -import java.io.FileInputStream; -import java.io.BufferedInputStream; -import java.io.UnsupportedEncodingException; -import java.lang.String; -import java.lang.StringBuffer; -import java.lang.Thread; -import java.lang.NumberFormatException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.SocketException; -import java.net.SocketTimeoutException; -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.BufferUnderflowException; -import java.util.HashMap; -import java.util.Properties; - -import org.apache.commons.httpclient.Credentials; -import org.apache.commons.httpclient.Header; -import org.apache.commons.httpclient.HostConfiguration; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpMethod; -import org.apache.commons.httpclient.UsernamePasswordCredentials; -import org.apache.commons.httpclient.methods.GetMethod; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Description of the Class - * - *@author ken - *@created 24 September 2003 - */ -public class T2hproxy implements Runnable { - /** - * Description of the Field - */ - public final static String NAME = T2hproxy.class.getName(); - /** - * Description of the Field - */ - public final static String VERSION = "0.1"; - /** - * Description of the Field - */ - public final static int MTU = 1500; - /** - * Description of the Field - */ - public final static short TFTP_RRQ = 1; - /** - * Description of the Field - */ - public final static short TFTP_DATA = 3; - /** - * Description of the Field - */ - public final static short TFTP_ACK = 4; - /** - * Description of the Field - */ - public final static short TFTP_ERROR = 5; - /** - * Description of the Field - */ - public final static short TFTP_OACK = 6; - /** - * Description of the Field - */ - public final static short ERR_NOFILE = 1; - /** - * Description of the Field - */ - public final static short ERR_ILLOP = 4; - /** - * Description of the Field - */ - public final static int MAX_RETRIES = 5; - /** - * TFTP timeout in milliseconds - */ - public final static int TFTP_ACK_TIMEOUT = 2000; - /** - * Description of the Field - */ - public final static int DEFAULT_PROXY_PORT = 3128; - - private static Log log = LogFactory.getLog(T2hproxy.class); - /** - * The members below must be per thread and must not share any storage with - * the main thread - */ - private DatagramSocket responsesocket; - private DatagramPacket response; - private InetAddress iaddr; - private int port; - private byte[] req; - private String prefix; - private String proxy = null; - private int timeout; - private HashMap options = new HashMap(); - private int blocksize = 512; - private HttpClient client = new HttpClient(); - private HttpMethod method; - private BufferedInputStream bstream = null; - private String message; - - - /** - * Constructor for the T2hproxy object - * - *@param i Description of the Parameter - *@param p Description of the Parameter - *@param b Description of the Parameter - *@param pf Description of the Parameter - *@param pr Description of the Parameter - *@param t Timeout for HTTP GET - */ - public T2hproxy(InetAddress i, int p, byte[] b, String pf, String pr, int t) { - iaddr = i; - port = p; - // make a copy of the request buffer - req = new byte[b.length]; - System.arraycopy(b, 0, req, 0, b.length); - prefix = pf; - // proxy can be null - proxy = pr; - timeout = t; - } - - - /** - * Extract an asciz string from bufer - * - *@param buffer Description of the Parameter - *@return The asciz value - */ - private String getAsciz(ByteBuffer buffer) { - StringBuffer s = new StringBuffer(); - try { - byte b; - while ((b = buffer.get()) != 0) { - s.append((char) b); - } - } catch (BufferUnderflowException e) { - } finally { - return (s.toString()); - } - } - - - /** - * Convert a string of digits to a number, invalid => 0 - * - *@param s Description of the Parameter - *@return Description of the Return Value - */ - private int atoi(String s) { - if (s == null) { - return (0); - } - int value = 0; - try { - value = (new Integer(s)).intValue(); - } catch (NumberFormatException e) { - } - return (value); - } - - - /** - * Wait for ack packet with timeout - * - *@return Return block number acked - */ - private int waitForAck() { - DatagramPacket ack = new DatagramPacket(new byte[MTU], MTU); - try { - do { - responsesocket.setSoTimeout(TFTP_ACK_TIMEOUT); - responsesocket.receive(ack); - } while (!ack.getAddress().equals(iaddr) || ack.getPort() != port); - } catch (SocketTimeoutException e) { - return (-1); - } catch (Exception e) { - log.info(e.toString(), e); - } - ByteBuffer buffer = ByteBuffer.wrap(ack.getData(), ack.getOffset(), ack.getLength() - ack.getOffset()); - short op; - if ((op = buffer.getShort()) == TFTP_ACK) { - return ((int) buffer.getShort()); - } else if (op == TFTP_ERROR) { - return (-2); - } - return (-3); - } - - - /** - * Description of the Method - * - *@param error Description of the Parameter - *@param message Description of the Parameter - */ - private void sendError(short error, String message) { - ByteBuffer buffer = ByteBuffer.wrap(response.getData()); - buffer.putShort(TFTP_ERROR).putShort(error).put(message.getBytes()); - response.setLength(buffer.position()); - try { - responsesocket.send(response); - } catch (Exception e) { - log.info(e.toString(), e); - } - } - - - /** - * Description of the Method - * - *@return Description of the Return Value - */ - private boolean sendOackRecvAck() { - ByteBuffer buffer = ByteBuffer.wrap(response.getData()); - buffer.putShort(TFTP_OACK).put("blksize".getBytes()).put((byte) 0).put(String.valueOf(blocksize).getBytes()).put((byte) 0); - response.setLength(buffer.position()); - int retry; - for (retry = 0; retry < MAX_RETRIES; retry++) { - try { - responsesocket.send(response); - } catch (Exception e) { - log.info(e.toString(), e); - } - if (waitForAck() == 0) { - log.debug("Ack received"); - break; - } - } - return (retry < MAX_RETRIES); - } - - - /** - * Description of the Method - * - *@param block Description of the Parameter - *@return Description of the Return Value - */ - private boolean sendDataBlock(int block) { - int retry; - for (retry = 0; retry < MAX_RETRIES; retry++) { - try { - responsesocket.send(response); - } catch (Exception e) { - log.info(e.toString(), e); - } - int ablock; - if ((ablock = waitForAck()) == block) { - log.debug("Ack received for " + ablock); - break; - } else if (ablock == -1) { - log.info("Timeout waiting for ack"); - } else if (ablock == -2) { - return (false); - } else { - log.info("Unknown opcode from ack"); - } - } - return (retry < MAX_RETRIES); - } - - - /** - * Description of the Method - * - *@param buffer Description of the Parameter - *@return Description of the Return Value - */ - private boolean handleOptions(ByteBuffer buffer) { - for (; ; ) { - String option = getAsciz(buffer); - String value = getAsciz(buffer); - if (option.equals("") || value.equals("")) { - break; - } - log.info(option + " " + value); - options.put(option, value); - } - blocksize = atoi((String) options.get("blksize")); - if (blocksize < 512) { - blocksize = 512; - } - if (blocksize > 1432) { - blocksize = 1432; - } - return (sendOackRecvAck()); - } - - - /** - * Description of the Method - * - *@param url Description of the Parameter - */ - private void makeStream(String url) { - // establish a connection within timeout milliseconds - client.setConnectionTimeout(timeout); - if (proxy != null) { - String[] hostport = proxy.split(":"); - int port = DEFAULT_PROXY_PORT; - if (hostport.length > 1) { - port = atoi(hostport[1]); - if (port == 0) { - port = DEFAULT_PROXY_PORT; - } - } - log.info("Proxy is " + hostport[0] + ":" + port); - client.getHostConfiguration().setProxy(hostport[0], port); - } - // create a method object - method = new GetMethod(url); - method.setFollowRedirects(true); - method.setStrictMode(false); - try { - int status; - if ((status = client.executeMethod(method)) != 200) { - log.info(message = method.getStatusText()); - return; - } - bstream = new BufferedInputStream(method.getResponseBodyAsStream()); - } catch (HttpException he) { - message = he.getMessage(); - } catch (IOException ioe) { - message = "Unable to get " + url; - } - } - - - /** - * Reads a block of data from URL stream - * - *@param stream Description of the Parameter - *@param data Description of the Parameter - *@param blocksize Description of the Parameter - *@param offset Description of the Parameter - *@return Number of bytes read - */ - private int readBlock(BufferedInputStream stream, byte[] data, int offset, int blocksize) { - int status; - int nread = 0; - while (nread < blocksize) { - try { - status = stream.read(data, offset + nread, blocksize - nread); - } catch (Exception e) { - return (-1); - } - if (status < 0) { - return (nread); - } - nread += status; - } - return (nread); - } - - - /** - * Description of the Method - * - *@param filename Description of the Parameter - */ - private void doRrq(String filename) { - String url = prefix + filename; - log.info("GET " + url); - makeStream(url); - if (bstream == null) { - log.info(message); - sendError(ERR_NOFILE, message); - return; - } - // read directly into send buffer to avoid buffer copying - byte[] data; - ByteBuffer buffer = ByteBuffer.wrap(data = response.getData()); - // dummy puts to get start position of data - buffer.putShort(TFTP_DATA).putShort((short) 0); - int start = buffer.position(); - int length; - int block = 1; - do { - length = readBlock(bstream, data, start, blocksize); - block &= 0xffff; - log.debug("Block " + block + " " + length); - // fill in the block number - buffer.position(0); - buffer.putShort(TFTP_DATA).putShort((short) block); - response.setLength(start + length); - if (!sendDataBlock(block)) { - break; - } - buffer.position(start); - block++; - } while (length >= blocksize); - log.info("Closing TFTP session"); - // clean up the connection resources - method.releaseConnection(); - method.recycle(); - } - - - /** - * Main processing method for the T2hproxy object - */ - public void run() { - ByteBuffer buffer = ByteBuffer.wrap(req); - buffer.getShort(); - String filename = getAsciz(buffer); - String mode = getAsciz(buffer); - log.info(filename + " " + mode); - response = new DatagramPacket(new byte[MTU], MTU, iaddr, port); - try { - responsesocket = new DatagramSocket(); - } catch (SocketException e) { - log.info(e.toString(), e); - return; - } - if (!handleOptions(buffer)) { - return; - } - doRrq(filename); - } - - - /** - * Description of the Method - * - *@param s Description of the Parameter - *@param r Description of the Parameter - *@param prefix Description of the Parameter - *@param proxy Description of the Parameter - *@param timeout Description of the Parameter - */ - public static void handleRequest(DatagramSocket s, DatagramPacket r, String prefix, String proxy, int timeout) { - log.info("Connection from " + r.getAddress().getCanonicalHostName() + ":" + r.getPort()); - ByteBuffer buffer = ByteBuffer.wrap(r.getData(), r.getOffset(), r.getLength() - r.getOffset()); - if (buffer.getShort() != TFTP_RRQ) { - DatagramPacket error = new DatagramPacket(new byte[MTU], MTU); - ByteBuffer rbuf = ByteBuffer.wrap(error.getData()); - rbuf.putShort(TFTP_ERROR).putShort(ERR_ILLOP).put("Illegal operation".getBytes()); - error.setLength(rbuf.position()); - try { - s.send(error); - } catch (Exception e) { - log.info(e.toString(), e); - } - return; - } - // fork thread - new Thread(new T2hproxy(r.getAddress(), r.getPort(), r.getData(), prefix, proxy, timeout)).start(); - } - - - /** - * The main program for the T2hproxy class - * - *@param argv The command line arguments - *@exception IOException Description of the Exception - */ - public static void main(String[] argv) throws IOException { - log.info(T2hproxy.NAME + "." + T2hproxy.VERSION); - int port = Integer.getInteger(T2hproxy.NAME + ".port", 69).intValue(); - String prefix = System.getProperty(T2hproxy.NAME + ".prefix", "http://localhost/"); - String proxy = System.getProperty(T2hproxy.NAME + ".proxy"); - int timeout = Integer.getInteger(T2hproxy.NAME + ".timeout", 5000).intValue(); - String propfile = System.getProperty(T2hproxy.NAME + ".properties"); - if (propfile != null) { - FileInputStream pf = new FileInputStream(propfile); - Properties p = new Properties(System.getProperties()); - p.load(pf); - // set the system properties - System.setProperties(p); - } - DatagramSocket requestsocket; - try { - requestsocket = new DatagramSocket(port); - } catch (SocketException e) { - log.info(e.toString(), e); - return; - } - DatagramPacket request = new DatagramPacket(new byte[MTU], MTU); - for (; ; ) { - try { - requestsocket.receive(request); - handleRequest(requestsocket, request, prefix, proxy, timeout); - } catch (Exception e) { - log.info(e.toString(), e); - } - } - } -} diff --git a/gpxe/contrib/t2hproxy/build.xml b/gpxe/contrib/t2hproxy/build.xml deleted file mode 100644 index 5494ab96..00000000 --- a/gpxe/contrib/t2hproxy/build.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<!-- - Build file for T2hproxy ---> -<project name="T2hproxy" default="jar" basedir="."> - <target name="compile"> - <javac fork="true" srcdir="." destdir="." /> - </target> - - <target name="jar" depends="compile"> - <jar jarfile="T2hproxy.jar" basedir="." - includes="T2hproxy.class"> - <manifest> - <attribute name="Main-Class" value="T2hproxy" /> - </manifest> - </jar> - </target> -</project> - diff --git a/gpxe/contrib/t2hproxy/runT2proxy.sh b/gpxe/contrib/t2hproxy/runT2proxy.sh deleted file mode 100755 index d7fc0d2d..00000000 --- a/gpxe/contrib/t2hproxy/runT2proxy.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -# If the httpclient and logging jars are not in the standard directories -# edit and uncomment -# CP='-cp /usr/local/lib/commons-httpclient-2.0-rc1.jar:/usr/local/lib/commons-logging-api.jar:/usr/local/lib/commons-logging.jar' - -# Edit and uncomment to use an alternate port -# PORT='-DT2hproxy.port=1069' -PREFIX='-DT2hproxy.prefix=http://localhost/' -# Edit and uncomment to use a proxy -# PROXY='-DT2hproxy.proxy=localhost:3128' -# These T2hproxy properties can be put in a file and read in all at once -# PROPERTIES='-DT2hproxy.properties=t2hproxy.prop - -exec java -jar $CP $PORT $PREFIX $PROXY $PROPERTIES T2hproxy.jar diff --git a/gpxe/contrib/t2hproxy/t2hproxy.pl b/gpxe/contrib/t2hproxy/t2hproxy.pl deleted file mode 100755 index 4fc01781..00000000 --- a/gpxe/contrib/t2hproxy/t2hproxy.pl +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/perl -w -# -# tftp to http proxy -# Copyright 2003 Ken Yap -# Released under GPL2 -# - -require 5.8.0; # needs constant and the pack Z format behaviour - -use bytes; # to forestall Unicode interpretation of strings -use strict; - -use Getopt::Long; -use Socket; -use Sys::Hostname; -use Sys::Syslog; -use LWP; -use POSIX 'setsid'; - -use constant PROGNAME => 't2hproxy'; -use constant VERSION => '0.1'; - -use constant ETH_DATA_LEN => 1500; -use constant { - TFTP_RRQ => 1, TFTP_WRQ => 2, TFTP_DATA => 3, TFTP_ACK => 4, - TFTP_ERROR => 5, TFTP_OACK => 6 -}; -use constant { - E_UNDEF => 0, E_FNF => 1, E_ACC => 2, E_DISK => 3, E_ILLOP => 4, - E_UTID => 5, E_FEXIST => 6, E_NOUSER => 7 -}; - -use vars qw($prefix $proxy $sockh $timeout %options $tsize $bsize); - -# We can't use die because xinetd will think something's wrong -sub log_and_exit ($) { - syslog('info', $_[0]); - exit; -} - -sub what_source ($) { - my ($port, $saddr) = sockaddr_in($_[0]); - my $host = gethostbyaddr($saddr, AF_INET); - return ($host, $port); -} - -sub send_error ($$$) { - my ($iaddr, $error, $message) = @_; - # error packets don't get acked - send(STDOUT, pack('nna*', TFTP_ERROR, $error, $message), 0, $iaddr); -} - -sub send_ack_retry ($$$$$) { - my ($iaddr, $udptimeout, $maxretries, $blockno, $sendfunc) = @_; -RETRY: - while ($maxretries-- > 0) { - &$sendfunc; - my $rin = ''; - my $rout = ''; - vec($rin, fileno($sockh), 1) = 1; - do { - my ($fds, $timeleft) = select($rout = $rin, undef, undef, $udptimeout); - last if ($fds <= 0); - my $ack; - my $theiripaddr = recv($sockh, $ack, 256, 0); - # check it's for us - if ($theiripaddr eq $iaddr) { - my ($opcode, $ackblock) = unpack('nn', $ack); - return (0) if ($opcode == TFTP_ERROR); - # check that the right block was acked - if ($ackblock == $blockno) { - return (1); - } else { - syslog('info', "Resending block $blockno"); - next RETRY; - } - } - # stray packet for some other server instance - send_error($theiripaddr, E_UTID, 'Wrong TID'); - } while (1); - } - return (0); -} - -sub handle_options ($$) { - my ($iaddr, $operand) = @_; - while ($operand ne '') { - my ($key, $value) = unpack('Z*Z*', $operand); - $options{$key} = $value; - syslog('info', "$key=$value"); - $operand = substr($operand, length($key) + length($value) + 2); - } - my $optstr = ''; - if (exists($options{blksize})) { - $bsize = $options{blksize}; - $bsize = 512 if ($bsize < 512); - $bsize = 1432 if ($bsize > 1432); - $optstr .= pack('Z*Z*', 'blksize', $bsize . ''); - } - # OACK expects an ack for block 0 - log_and_exit('Abort received or retransmit limit reached, exiting') - unless send_ack_retry($iaddr, 2, 5, 0, - sub { send($sockh, pack('na*', TFTP_OACK, $optstr), 0, $iaddr); }); -} - -sub http_get ($) { - my ($url) = @_; - syslog('info', "GET $url"); - my $ua = LWP::UserAgent->new; - $ua->timeout($timeout); - $ua->proxy(['http', 'ftp'], $proxy) if (defined($proxy) and $proxy); - my $req = HTTP::Request->new(GET => $url); - my $res = $ua->request($req); - return ($res->is_success, $res->status_line, $res->content_ref); -} - -sub send_file ($$) { - my ($iaddr, $contentref) = @_; - my $blockno = 1; - my $data; - do { - $blockno &= 0xffff; - $data = substr($$contentref, ($blockno - 1) * $bsize, $bsize); - # syslog('info', "Block $blockno length " . length($data)); - log_and_exit('Abort received or retransmit limit reached, exiting') - unless send_ack_retry($iaddr, 2, 5, $blockno, - sub { send($sockh, pack('nna*', TFTP_DATA, $blockno, $data), 0, $iaddr); }); - $blockno++; - } while (length($data) >= $bsize); -} - -sub do_rrq ($$) { - my ($iaddr, $packetref) = @_; - # fork and handle request in child so that *inetd can continue - # to serve incoming requests - defined(my $pid = fork) or log_and_exit("Can't fork: $!"); - exit if $pid; # parent exits - setsid or log_and_exit("Can't start a new session: $!"); - socket(SOCK, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or log_and_exit('Cannot create UDP socket'); - $sockh = *SOCK{IO}; - my ($opcode, $operand) = unpack('na*', $$packetref); - my ($filename, $mode) = unpack('Z*Z*', $operand); - syslog('info', "RRQ $filename $mode"); - my $length = length($filename) + length($mode) + 2; - $operand = substr($operand, $length); - handle_options($iaddr, $operand) if ($operand ne ''); - my ($success, $status_line, $result) = http_get($prefix . $filename); - syslog('info', $status_line); - if ($success) { - send_file($iaddr, $result); - } else { - send_error($iaddr, E_FNF, $status_line); - } -} - -$prefix = 'http://localhost/'; -$timeout = 60; -GetOptions('prefix=s' => \$prefix, - 'proxy=s' => \$proxy, - 'timeout=i' => \$timeout); -$bsize = 512; -openlog(PROGNAME, 'cons,pid', 'user'); -syslog('info', PROGNAME . ' version ' . VERSION); -my $packet; -my $theiriaddr = recv(STDIN, $packet, ETH_DATA_LEN, 0); -my ($host, $port) = what_source($theiriaddr); -syslog('info', "Connection from $host:$port"); -my $opcode = unpack('n', $packet); -if ($opcode == TFTP_RRQ) { - do_rrq($theiriaddr, \$packet); -} else { # anything else is an error - send_error($theiriaddr, E_ILLOP, 'Illegal operation'); -} -exit 0; diff --git a/gpxe/contrib/t2hproxy/t2hproxy.xinetd b/gpxe/contrib/t2hproxy/t2hproxy.xinetd deleted file mode 100644 index ea6a03f1..00000000 --- a/gpxe/contrib/t2hproxy/t2hproxy.xinetd +++ /dev/null @@ -1,29 +0,0 @@ -# Description: tftp to http proxy -# A sample config file for xinetd, edit and put in /etc/xinetd.d -# then killall -HUP xinetd, or restart xinetd - -service t2hproxy -{ - type = UNLISTED - id = t2hproxy - socket_type = dgram - protocol = udp -# -# The pathname to where you have installed it -# - server = /usr/local/sbin/t2hproxy.pl -# -# If your filenames don't start with /, then the trailing -# slash is needed -# - server_args = --prefix http://localhost/ -# -# --proxy http://proxyhost:3128/ can also be appended -# - log_type = FILE /var/log/t2hproxy.log - user = nobody - wait = yes - instances = 10 - disable = no - port = 69 -} diff --git a/gpxe/contrib/tftp/Makefile b/gpxe/contrib/tftp/Makefile deleted file mode 100644 index bd427cd0..00000000 --- a/gpxe/contrib/tftp/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# -# Copyright (c) 1987 Regents of the University of California. -# All rights reserved. -# -# Redistribution and use in source and binary forms are permitted -# provided that the above copyright notice and this paragraph are -# duplicated in all such forms and that any documentation, -# advertising materials, and other materials related to such -# distribution and use acknowledge that the software was developed -# by the University of California, Berkeley. The name of the -# University may not be used to endorse or promote products derived -# from this software without specific prior written permission. -# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -# -# @(#)Makefile 5.8 (Berkeley) 9/20/88 -# -# We override /usr/include/arpa/tftp.h with our own because -# we want tu_block to be unsigned short, not short as on most platforms -# -CFLAGS= -I. -O2 -Dsin=sin_x -SRCS= main.c tftp.c tftpsubs.c tftpd.c -OBJS= main.o tftp.o tftpsubs.o -DOBJS= tftpd.o tftpsubs.o -CC= gcc -LIBS= # -linet - -all: tftp tftpd - -tftp: ${OBJS} - ${CC} -o $@ ${CFLAGS} ${OBJS} # -linet - -tftpd: ${DOBJS} - ${CC} -o $@ ${CFLAGS} ${DOBJS} ${LIBS} - -clean: - rm -f ${OBJS} ${DOBJS} core tftp tftpd - -cleandir: clean - rm -f tags .depend - -depend: ${SRCS} - mkdep ${CFLAGS} ${SRCS} - -install: - install -s -o root -g root -m 755 tftp /usr/bin/tftp - install -c -o root -g root -m 444 tftp.1 /usr/man/man1 - install -s -o root -g root -m 755 tftpd /usr/sbin/in.tftpd - install -c -o root -g root -m 444 tftpd.8 /usr/man/man8 - -lint: ${SRCS} - lint ${CFLAGS} ${SRCS} - -tags: ${SRCS} - ctags ${SRCS} diff --git a/gpxe/contrib/tftp/README b/gpxe/contrib/tftp/README deleted file mode 100644 index e4957202..00000000 --- a/gpxe/contrib/tftp/README +++ /dev/null @@ -1,28 +0,0 @@ -This is a copy of the TFTP client as available from -ftp://sunsite.unc.edu/pub/linux/system/Network/file-transfer; I -modified the code, so that it understands RFC1782 and RFC1783 -extensions to the TFTP protocol. This allows for negotating an -extended transfer block size of up to 1432 bytes (as oppossed to the -standard 512 bytes). On busy networks, this will result in -considerably improved throughput and less load on the network. - -For further information and for licensing conditions, please have a -look at the header of the source files. - -Markus Gutschke <gutschk@math.uni-muenster.de> - -This is a copy of the TFTP server as available from -ftp://sunsite.unc.edu/pub/linux/system/Network/file-transfer; I -modified the code, so that it understands RFC1782 and RFC1783 -extensions to the TFTP protocol. This allows for negotating an -extended transfer block size of up to 1432 bytes (as oppossed to the -standard 512 bytes). On busy networks, this will result in -considerably improved throughput and less load on the network. - -I also added two command line options for changing the root directory -and for enabling debugging output. - -For further information and for licensing conditions, please have a -look at the header of the source files. - -Markus Gutschke <gutschk@math.uni-muenster.de> diff --git a/gpxe/contrib/tftp/arpa/tftp.h b/gpxe/contrib/tftp/arpa/tftp.h deleted file mode 100644 index 0904407c..00000000 --- a/gpxe/contrib/tftp/arpa/tftp.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)tftp.h 8.1 (Berkeley) 6/2/93 - */ - -#ifndef _ARPA_TFTP_H -#define _ARPA_TFTP_H 1 - -/* - * Trivial File Transfer Protocol (IEN-133) - */ -#define SEGSIZE 512 /* data segment size */ - -/* - * Packet types. - */ -#define RRQ 01 /* read request */ -#define WRQ 02 /* write request */ -#define DATA 03 /* data packet */ -#define ACK 04 /* acknowledgement */ -#define ERROR 05 /* error code */ - -struct tftphdr { - short th_opcode; /* packet type */ - union { - unsigned short tu_block; /* block # */ - short tu_code; /* error code */ - char tu_stuff[1]; /* request packet stuff */ - } th_u; - char th_data[1]; /* data or error string */ -}; - -#define th_block th_u.tu_block -#define th_code th_u.tu_code -#define th_stuff th_u.tu_stuff -#define th_msg th_data - -/* - * Error codes. - */ -#define EUNDEF 0 /* not defined */ -#define ENOTFOUND 1 /* file not found */ -#define EACCESS 2 /* access violation */ -#define ENOSPACE 3 /* disk full or allocation exceeded */ -#define EBADOP 4 /* illegal TFTP operation */ -#define EBADID 5 /* unknown transfer ID */ -#define EEXISTS 6 /* file already exists */ -#define ENOUSER 7 /* no such user */ - -#endif /* arpa/tftp.h */ diff --git a/gpxe/contrib/tftp/main.c b/gpxe/contrib/tftp/main.c deleted file mode 100644 index ca4427a1..00000000 --- a/gpxe/contrib/tftp/main.c +++ /dev/null @@ -1,684 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1983 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)main.c 5.8 (Berkeley) 10/11/88"; -#endif /* not lint */ - -/* Many bug fixes are from Jim Guyton <guyton@rand-unix> */ - -/* - * TFTP User Program -- Command Interface. - */ -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/file.h> - -#include <netinet/in.h> - -#include <signal.h> -#include <stdio.h> -#include <errno.h> -#include <setjmp.h> -#include <ctype.h> -#include <netdb.h> - -#define TIMEOUT 5 /* secs between rexmt's */ - -struct sockaddr_in sin; -int f; -short port; -int trace; -int verbose; -int connected; -char mode[32]; -char line[200]; -int margc; -char *margv[20]; -char *prompt = "tftp"; -jmp_buf toplevel; -void intr(int); -struct servent *sp; - -int segsize = 512; - -int quit(), help(), setverbose(), settrace(), status(); -int get(), put(), setpeer(), modecmd(), setrexmt(), settimeout(); -int setbinary(), setascii(), setblocksize(); - -#define HELPINDENT (sizeof("connect")) - -struct cmd { - char *name; - char *help; - int (*handler)(); -}; - -char vhelp[] = "toggle verbose mode"; -char thelp[] = "toggle packet tracing"; -char chelp[] = "connect to remote tftp"; -char qhelp[] = "exit tftp"; -char hhelp[] = "print help information"; -char shelp[] = "send file"; -char rhelp[] = "receive file"; -char mhelp[] = "set file transfer mode"; -char sthelp[] = "show current status"; -char xhelp[] = "set per-packet retransmission timeout"; -char ihelp[] = "set total retransmission timeout"; -char ashelp[] = "set mode to netascii"; -char bnhelp[] = "set mode to octet"; -char bshelp[] = "set blocksize for next transfer"; - -struct cmd cmdtab[] = { - { "connect", chelp, setpeer }, - { "mode", mhelp, modecmd }, - { "put", shelp, put }, - { "get", rhelp, get }, - { "quit", qhelp, quit }, - { "verbose", vhelp, setverbose }, - { "trace", thelp, settrace }, - { "status", sthelp, status }, - { "binary", bnhelp, setbinary }, - { "ascii", ashelp, setascii }, - { "rexmt", xhelp, setrexmt }, - { "timeout", ihelp, settimeout }, - { "blocksize", bshelp, setblocksize }, - { "?", hhelp, help }, - 0 -}; - -struct cmd *getcmd(); -char *tail(); -char *index(); -char *rindex(); - -main(argc, argv) - char *argv[]; -{ - struct sockaddr_in sin; - int top; - - sp = getservbyname("tftp", "udp"); - if (sp == 0) { - fprintf(stderr, "tftp: udp/tftp: unknown service\n"); - exit(1); - } - f = socket(AF_INET, SOCK_DGRAM, 0); - if (f < 0) { - perror("tftp: socket"); - exit(3); - } - bzero((char *)&sin, sizeof (sin)); - sin.sin_family = AF_INET; - if (bind(f, (struct sockaddr *)&sin, sizeof (sin)) < 0) { - perror("tftp: bind"); - exit(1); - } - strcpy(mode, "netascii"); - signal(SIGINT, intr); - if (argc > 1) { - if (setjmp(toplevel) != 0) - exit(0); - setpeer(argc, argv); - } - top = setjmp(toplevel) == 0; - for (;;) - command(top); -} - -char hostname[100]; - -setpeer(argc, argv) - int argc; - char *argv[]; -{ - struct hostent *host; - - if (argc < 2) { - strcpy(line, "Connect "); - printf("(to) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc > 3) { - printf("usage: %s host-name [port]\n", argv[0]); - return; - } - host = gethostbyname(argv[1]); - if (host) { - sin.sin_family = host->h_addrtype; - bcopy(host->h_addr, &sin.sin_addr, host->h_length); - strcpy(hostname, host->h_name); - } else { - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = inet_addr(argv[1]); - if (sin.sin_addr.s_addr == -1) { - connected = 0; - printf("%s: unknown host\n", argv[1]); - return; - } - strcpy(hostname, argv[1]); - } - port = sp->s_port; - if (argc == 3) { - port = atoi(argv[2]); - if (port < 0) { - printf("%s: bad port number\n", argv[2]); - connected = 0; - return; - } - port = htons(port); - } - connected = 1; -} - -struct modes { - char *m_name; - char *m_mode; -} modes[] = { - { "ascii", "netascii" }, - { "netascii", "netascii" }, - { "binary", "octet" }, - { "image", "octet" }, - { "octet", "octet" }, -/* { "mail", "mail" }, */ - { 0, 0 } -}; - -modecmd(argc, argv) - char *argv[]; -{ - register struct modes *p; - char *sep; - - if (argc < 2) { - printf("Using %s mode to transfer files.\n", mode); - return; - } - if (argc == 2) { - for (p = modes; p->m_name; p++) - if (strcmp(argv[1], p->m_name) == 0) - break; - if (p->m_name) { - setmode(p->m_mode); - return; - } - printf("%s: unknown mode\n", argv[1]); - /* drop through and print usage message */ - } - - printf("usage: %s [", argv[0]); - sep = " "; - for (p = modes; p->m_name; p++) { - printf("%s%s", sep, p->m_name); - if (*sep == ' ') - sep = " | "; - } - printf(" ]\n"); - return; -} - -setbinary(argc, argv) -char *argv[]; -{ setmode("octet"); -} - -setascii(argc, argv) -char *argv[]; -{ setmode("netascii"); -} - -setmode(newmode) -char *newmode; -{ - strcpy(mode, newmode); - if (verbose) - printf("mode set to %s\n", mode); -} - - -/* - * Send file(s). - */ -put(argc, argv) - char *argv[]; -{ - int fd; - register int n; - register char *cp, *targ; - - if (argc < 2) { - strcpy(line, "send "); - printf("(file) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc < 2) { - putusage(argv[0]); - return; - } - targ = argv[argc - 1]; - if (index(argv[argc - 1], ':')) { - char *cp; - struct hostent *hp; - - for (n = 1; n < argc - 1; n++) - if (index(argv[n], ':')) { - putusage(argv[0]); - return; - } - cp = argv[argc - 1]; - targ = index(cp, ':'); - *targ++ = 0; - hp = gethostbyname(cp); - if (hp == NULL) { - fprintf(stderr, "tftp: %s: ", cp); - herror((char *)NULL); - return; - } - bcopy(hp->h_addr, (caddr_t)&sin.sin_addr, hp->h_length); - sin.sin_family = hp->h_addrtype; - connected = 1; - strcpy(hostname, hp->h_name); - } - if (!connected) { - printf("No target machine specified.\n"); - return; - } - if (argc < 4) { - cp = argc == 2 ? tail(targ) : argv[1]; - fd = open(cp, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "tftp: "); perror(cp); - return; - } - if (verbose) - printf("putting %s to %s:%s [%s]\n", - cp, hostname, targ, mode); - sin.sin_port = port; - sendfile(fd, targ, mode); - return; - } - /* this assumes the target is a directory */ - /* on a remote unix system. hmmmm. */ - cp = index(targ, '\0'); - *cp++ = '/'; - for (n = 1; n < argc - 1; n++) { - strcpy(cp, tail(argv[n])); - fd = open(argv[n], O_RDONLY); - if (fd < 0) { - fprintf(stderr, "tftp: "); perror(argv[n]); - continue; - } - if (verbose) - printf("putting %s to %s:%s [%s]\n", - argv[n], hostname, targ, mode); - sin.sin_port = port; - sendfile(fd, targ, mode); - } -} - -putusage(s) - char *s; -{ - printf("usage: %s file ... host:target, or\n", s); - printf(" %s file ... target (when already connected)\n", s); -} - -/* - * Receive file(s). - */ -get(argc, argv) - char *argv[]; -{ - int fd; - register int n; - register char *cp; - char *src; - - if (argc < 2) { - strcpy(line, "get "); - printf("(files) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc < 2) { - getusage(argv[0]); - return; - } - if (!connected) { - for (n = 1; n < argc ; n++) - if (index(argv[n], ':') == 0) { - getusage(argv[0]); - return; - } - } - for (n = 1; n < argc ; n++) { - src = index(argv[n], ':'); - if (src == NULL) - src = argv[n]; - else { - struct hostent *hp; - - *src++ = 0; - hp = gethostbyname(argv[n]); - if (hp == NULL) { - fprintf(stderr, "tftp: %s: ", argv[n]); - herror((char *)NULL); - continue; - } - bcopy(hp->h_addr, (caddr_t)&sin.sin_addr, hp->h_length); - sin.sin_family = hp->h_addrtype; - connected = 1; - strcpy(hostname, hp->h_name); - } - if (argc < 4) { - cp = argc == 3 ? argv[2] : tail(src); - fd = creat(cp, 0644); - if (fd < 0) { - fprintf(stderr, "tftp: "); perror(cp); - return; - } - if (verbose) - printf("getting from %s:%s to %s [%s]\n", - hostname, src, cp, mode); - sin.sin_port = port; - recvfile(fd, src, mode); - break; - } - cp = tail(src); /* new .. jdg */ - fd = creat(cp, 0644); - if (fd < 0) { - fprintf(stderr, "tftp: "); perror(cp); - continue; - } - if (verbose) - printf("getting from %s:%s to %s [%s]\n", - hostname, src, cp, mode); - sin.sin_port = port; - recvfile(fd, src, mode); - } -} - -getusage(s) -char * s; -{ - printf("usage: %s host:file host:file ... file, or\n", s); - printf(" %s file file ... file if connected\n", s); -} - -int rexmtval = TIMEOUT; - -setrexmt(argc, argv) - char *argv[]; -{ - int t; - - if (argc < 2) { - strcpy(line, "Rexmt-timeout "); - printf("(value) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc != 2) { - printf("usage: %s value\n", argv[0]); - return; - } - t = atoi(argv[1]); - if (t < 0) - printf("%d: bad value\n", t); - else - rexmtval = t; -} - -int maxtimeout = 5 * TIMEOUT; - -settimeout(argc, argv) - char *argv[]; -{ - int t; - - if (argc < 2) { - strcpy(line, "Maximum-timeout "); - printf("(value) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc != 2) { - printf("usage: %s value\n", argv[0]); - return; - } - t = atoi(argv[1]); - if (t < 0) - printf("%d: bad value\n", t); - else - maxtimeout = t; -} - -status(argc, argv) - char *argv[]; -{ - if (connected) - printf("Connected to %s.\n", hostname); - else - printf("Not connected.\n"); - printf("Mode: %s Verbose: %s Tracing: %s\n", mode, - verbose ? "on" : "off", trace ? "on" : "off"); - printf("Rexmt-interval: %d seconds, Max-timeout: %d seconds\n", - rexmtval, maxtimeout); -} - -void intr(int sig) -{ - signal(SIGALRM, SIG_IGN); - alarm(0); - longjmp(toplevel, -1); -} - -char * -tail(filename) - char *filename; -{ - register char *s; - - while (*filename) { - s = rindex(filename, '/'); - if (s == NULL) - break; - if (s[1]) - return (s + 1); - *s = '\0'; - } - return (filename); -} - -/* - * Command parser. - */ -command(top) - int top; -{ - register struct cmd *c; - - if (!top) - putchar('\n'); - for (;;) { - printf("%s> ", prompt); - if (fgets(line, sizeof(line), stdin) == 0) { - if (feof(stdin)) { - quit(); - } else { - continue; - } - } - if (line[0] == 0) - continue; - makeargv(); - c = getcmd(margv[0]); - if (c == (struct cmd *)-1) { - printf("?Ambiguous command\n"); - continue; - } - if (c == 0) { - printf("?Invalid command\n"); - continue; - } - (*c->handler)(margc, margv); - } -} - -struct cmd * -getcmd(name) - register char *name; -{ - register char *p, *q; - register struct cmd *c, *found; - register int nmatches, longest; - - longest = 0; - nmatches = 0; - found = 0; - for (c = cmdtab; p = c->name; c++) { - for (q = name; *q == *p++; q++) - if (*q == 0) /* exact match? */ - return (c); - if (!*q) { /* the name was a prefix */ - if (q - name > longest) { - longest = q - name; - nmatches = 1; - found = c; - } else if (q - name == longest) - nmatches++; - } - } - if (nmatches > 1) - return ((struct cmd *)-1); - return (found); -} - -/* - * Slice a string up into argc/argv. - */ -makeargv() -{ - register char *cp; - register char **argp = margv; - - margc = 0; - for (cp = line; *cp;) { - while (isspace(*cp)) - cp++; - if (*cp == '\0') - break; - *argp++ = cp; - margc += 1; - while (*cp != '\0' && !isspace(*cp)) - cp++; - if (*cp == '\0') - break; - *cp++ = '\0'; - } - *argp++ = 0; -} - -/*VARARGS*/ -quit() -{ - exit(0); -} - -/* - * Help command. - */ -help(argc, argv) - int argc; - char *argv[]; -{ - register struct cmd *c; - - if (argc == 1) { - printf("Commands may be abbreviated. Commands are:\n\n"); - for (c = cmdtab; c->name; c++) - printf("%-*s\t%s\n", HELPINDENT, c->name, c->help); - return; - } - while (--argc > 0) { - register char *arg; - arg = *++argv; - c = getcmd(arg); - if (c == (struct cmd *)-1) - printf("?Ambiguous help command %s\n", arg); - else if (c == (struct cmd *)0) - printf("?Invalid help command %s\n", arg); - else - printf("%s\n", c->help); - } -} - -/*VARARGS*/ -settrace() -{ - trace = !trace; - printf("Packet tracing %s.\n", trace ? "on" : "off"); -} - -/*VARARGS*/ -setverbose() -{ - verbose = !verbose; - printf("Verbose mode %s.\n", verbose ? "on" : "off"); -} - -setblocksize(argc, argv) - char *argv[]; -{ - int t; - - if (argc < 2) { - strcpy(line, "blocksize "); - printf("(value) "); - fgets(&line[strlen(line)], sizeof(line) - strlen(line) - 1, stdin); - makeargv(); - argc = margc; - argv = margv; - } - if (argc != 2) { - printf("usage: %s value\n", argv[0]); - return; - } - t = atoi(argv[1]); - if (t < 8 || t > 1432) - printf("%d: bad value\n", t); - else - segsize = t; -} diff --git a/gpxe/contrib/tftp/tftp.1 b/gpxe/contrib/tftp/tftp.1 deleted file mode 100644 index fc235b2a..00000000 --- a/gpxe/contrib/tftp/tftp.1 +++ /dev/null @@ -1,159 +0,0 @@ -.\" Copyright (c) 1986 The Regents of the University of California. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms are permitted -.\" provided that the above copyright notice and this paragraph are -.\" duplicated in all such forms and that any documentation, -.\" advertising materials, and other materials related to such -.\" distribution and use acknowledge that the software was developed -.\" by the University of California, Berkeley. The name of the -.\" University may not be used to endorse or promote products derived -.\" from this software without specific prior written permission. -.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -.\" -.\" @(#)tftp.1 5.3 (Berkeley) 9/20/88 -.\" -.TH TFTP 1 "September 20, 1988" -.UC 6 -.SH NAME -tftp \- trivial file transfer program -.SH SYNOPSIS -.B tftp -[ -host -] -.SH DESCRIPTION -.I Tftp -is the user interface to the Internet TFTP -(Trivial File Transfer Protocol), -which allows users to transfer files to and from a remote machine. -The remote -.I host -may be specified on the command line, in which case -.I tftp -uses -.I host -as the default host for future transfers (see the -.B connect -command below). -.SH COMMANDS -Once -.I tftp -is running, it issues the prompt -.B tftp> -and recognizes the following commands: -.TP -\fBconnect\fP \fIhost-name\fP [ \fIport\fP ] -Set the -.I host -(and optionally -.IR port ) -for transfers. -Note that the TFTP protocol, unlike the FTP protocol, -does not maintain connections betweeen transfers; thus, the -.I connect -command does not actually create a connection, -but merely remembers what host is to be used for transfers. -You do not have to use the -.I connect -command; the remote host can be specified as part of the -.I get -or -.I put -commands. -.TP -\fBmode\fP \fItransfer-mode\fP -Set the mode for transfers; -.I transfer-mode -may be one of -.IR ascii -or -.IR binary . -The default is -.IR ascii . -.TP -\fBput\fP \fIfile\fP -.ns -.TP -\fBput\fP \fIlocalfile remotefile\fP -.ns -.TP -\fBput\fP \fIfile1 file2 ... fileN remote-directory\fP -Put a file or set of files to the specified -remote file or directory. -The destination -can be in one of two forms: -a filename on the remote host, if the host has already been specified, -or a string of the form -.I host:filename -to specify both a host and filename at the same time. -If the latter form is used, -the hostname specified becomes the default for future transfers. -If the remote-directory form is used, the remote host is -assumed to be a -.I UNIX -machine. -.TP -\fBget\fP \fIfilename\fP -.ns -.TP -\fBget\fP \fIremotename\fP \fIlocalname\fP -.ns -.TP -\fBget\fP \fIfile1\fP \fIfile2\fP ... \fIfileN\fP -Get a file or set of files from the specified -.IR sources . -.I Source -can be in one of two forms: -a filename on the remote host, if the host has already been specified, -or a string of the form -.I host:filename -to specify both a host and filename at the same time. -If the latter form is used, -the last hostname specified becomes the default for future transfers. -.TP -.B quit -Exit -.IR tftp . -An end of file also exits. -.TP -.B verbose -Toggle verbose mode. -.TP -.B trace -Toggle packet tracing. -.TP -.B status -Show current status. -.TP -\fBrexmt\fP \fIretransmission-timeout\fP -Set the per-packet retransmission timeout, in seconds. -.TP -\fBtimeout\fP \fItotal-transmission-timeout\fP -Set the total transmission timeout, in seconds. -.TP -.B ascii -Shorthand for "mode ascii" -.TP -.B binary -Shorthand for "mode binary" -.TP -\fBblocksize\fP \fItransfer-blocksize\fP -Set the blocksize that is used for transfers. This assumes that the -server knows about RFC1782 and RFC1783 extensions to the TFTP -protocol; automatic fallback is supported and will result in a default -blocksize of 512 octets. -.TP -\fB?\fP \ [ \fIcommand-name\fP ... ] -Print help information. -.SH BUGS -.PP -Because there is no user-login or validation within -the -.I TFTP -protocol, the remote site will probably have some -sort of file-access restrictions in place. The -exact methods are specific to each site and therefore -difficult to document here. diff --git a/gpxe/contrib/tftp/tftp.c b/gpxe/contrib/tftp/tftp.c deleted file mode 100644 index 894e535e..00000000 --- a/gpxe/contrib/tftp/tftp.c +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -static char sccsid[] = "@(#)tftp.c 5.7 (Berkeley) 6/29/88"; -#endif /* not lint */ - -/* Many bug fixes are from Jim Guyton <guyton@rand-unix> */ - -/* - * TFTP User Program -- Protocol Machines - */ -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/time.h> - -#include <netinet/in.h> - -#include <arpa/tftp.h> - -#include <signal.h> -#include <stdio.h> -#include <errno.h> -#include <setjmp.h> - -extern int errno; - -extern struct sockaddr_in sin; /* filled in by main */ -extern int f; /* the opened socket */ -extern int trace; -extern int verbose; -extern int rexmtval; -extern int maxtimeout; -extern int segsize; - -#define PKTSIZE (1432+4) /* SEGSIZE+4 */ -char ackbuf[PKTSIZE]; -int timeout; -jmp_buf toplevel; -jmp_buf timeoutbuf; - -#ifndef OACK -#define OACK 6 -#endif - -void timer(int sig) -{ - - signal(SIGALRM, timer); - timeout += rexmtval; - if (timeout >= maxtimeout) { - printf("Transfer timed out.\n"); - longjmp(toplevel, -1); - } - longjmp(timeoutbuf, 1); -} - -strnlen(s, n) - char *s; - int n; -{ - int i = 0; - - while (n-- > 0 && *s++) i++; - return(i); -} - -/* - * Parse an OACK package and set blocksize accordingly - */ -parseoack(cp, sz) - char *cp; - int sz; -{ - int n; - - segsize = 512; - while (sz > 0 && *cp) { - n = strnlen(cp, sz); - if (n == 7 && !strncmp("blksize", cp, 7)) { - cp += 8; - sz -= 8; - if (sz <= 0) - break; - for (segsize = 0, n = strnlen(cp, sz); n > 0; - n--, cp++, sz--) { - if (*cp < '0' || *cp > '9') - break; - segsize = 10*segsize + *cp - '0'; } - } - cp += n + 1; - sz -= n + 1; - } - if (segsize < 8 || segsize > 1432) { - printf("Remote host negotiated illegal blocksize %d\n", - segsize); - segsize = 512; - longjmp(timeoutbuf, -1); - } -} - -/* - * Send the requested file. - */ -sendfile(fd, name, mode) - int fd; - char *name; - char *mode; -{ - register struct tftphdr *ap; /* data and ack packets */ - struct tftphdr *r_init(), *dp; - register int size, n; - u_short block = 0; - register unsigned long amount = 0; - struct sockaddr_in from; - int fromlen; - int convert; /* true if doing nl->crlf conversion */ - FILE *file; - - startclock(); /* start stat's clock */ - dp = r_init(); /* reset fillbuf/read-ahead code */ - ap = (struct tftphdr *)ackbuf; - file = fdopen(fd, "r"); - convert = !strcmp(mode, "netascii"); - - signal(SIGALRM, timer); - do { - if (block == 0) - size = makerequest(WRQ, name, dp, mode) - 4; - else { - /* size = read(fd, dp->th_data, SEGSIZE); */ - size = readit(file, &dp, convert); - if (size < 0) { - nak(errno + 100); - break; - } - dp->th_opcode = htons((u_short)DATA); - dp->th_block = htons(block); - } - timeout = 0; - (void) setjmp(timeoutbuf); -send_data: - if (trace) - tpacket("sent", dp, size + 4); - n = sendto(f, dp, size + 4, 0, (struct sockaddr *)&sin, - sizeof (sin)); - if (n != size + 4) { - perror("tftp: sendto"); - goto abort; - } - if (block) /* do not start reading until the blocksize - has been negotiated */ - read_ahead(file, convert); - for ( ; ; ) { - alarm(rexmtval); - do { - fromlen = sizeof (from); - n = recvfrom(f, ackbuf, sizeof (ackbuf), 0, - (struct sockaddr *)&from, - &fromlen); - } while (n <= 0); - alarm(0); - if (n < 0) { - perror("tftp: recvfrom"); - goto abort; - } - sin.sin_port = from.sin_port; /* added */ - if (trace) - tpacket("received", ap, n); - /* should verify packet came from server */ - ap->th_opcode = ntohs(ap->th_opcode); - if (ap->th_opcode == ERROR) { - printf("Error code %d: %s\n", ap->th_code, - ap->th_msg); - goto abort; - } - if (ap->th_opcode == ACK) { - int j; - - ap->th_block = ntohs(ap->th_block); - - if (block == 0) { - if (trace) - printf("server does not know " - "about RFC1782; reset" - "ting blocksize\n"); - segsize = 512; - } - if (ap->th_block == block) { - break; - } - /* On an error, try to synchronize - * both sides. - */ - j = synchnet(f); - if (j && trace) { - printf("discarded %d packets\n", - j); - } - if (ap->th_block == (block-1)) { - goto send_data; - } - } - else if (ap->th_opcode == OACK) { - if (block) { - printf("protocol violation\n"); - longjmp(toplevel, -1); - } - parseoack(&ap->th_stuff, n - 2); - break; - } - } - if (block > 0) - amount += size; - else - read_ahead(file, convert); - block++; - } while (size == segsize || block == 1); -abort: - fclose(file); - stopclock(); - if (amount > 0) - printstats("Sent", amount); -} - -/* - * Receive a file. - */ -recvfile(fd, name, mode) - int fd; - char *name; - char *mode; -{ - register struct tftphdr *ap; - struct tftphdr *dp, *w_init(); - register int n, size; - u_short block = 1; - unsigned long amount = 0; - struct sockaddr_in from; - int fromlen, firsttrip = 1; - FILE *file; - int convert; /* true if converting crlf -> lf */ - int waitforoack = 1; - - startclock(); - dp = w_init(); - ap = (struct tftphdr *)ackbuf; - file = fdopen(fd, "w"); - convert = !strcmp(mode, "netascii"); - - signal(SIGALRM, timer); - do { - if (firsttrip) { - size = makerequest(RRQ, name, ap, mode); - firsttrip = 0; - } else { - ap->th_opcode = htons((u_short)ACK); - ap->th_block = htons(block); - size = 4; - block++; - } - timeout = 0; - (void) setjmp(timeoutbuf); -send_ack: - if (trace) - tpacket("sent", ap, size); - if (sendto(f, ackbuf, size, 0, (struct sockaddr *)&sin, - sizeof (sin)) != size) { - alarm(0); - perror("tftp: sendto"); - goto abort; - } - if (!waitforoack) - write_behind(file, convert); - for ( ; ; ) { - alarm(rexmtval); - do { - fromlen = sizeof (from); - n = recvfrom(f, dp, PKTSIZE, 0, - (struct sockaddr *)&from, &fromlen); - } while (n <= 0); - alarm(0); - if (n < 0) { - perror("tftp: recvfrom"); - goto abort; - } - sin.sin_port = from.sin_port; /* added */ - if (trace) - tpacket("received", dp, n); - /* should verify client address */ - dp->th_opcode = ntohs(dp->th_opcode); - if (dp->th_opcode == ERROR) { - printf("Error code %d: %s\n", dp->th_code, - dp->th_msg); - goto abort; - } - if (dp->th_opcode == DATA) { - int j; - - if (waitforoack) { - if (trace) - printf("server does not know " - "about RFC1782; reset" - "ting blocksize\n"); - waitforoack = 0; - segsize = 512; - } - dp->th_block = ntohs(dp->th_block); - if (dp->th_block == block) { - break; /* have next packet */ - } - /* On an error, try to synchronize - * both sides. - */ - j = synchnet(f); - if (j && trace) { - printf("discarded %d packets\n", j); - } - if (dp->th_block == (block-1)) { - goto send_ack; /* resend ack */ - } - } - else if (dp->th_opcode == OACK) { - if (block != 1 || !waitforoack) { - printf("protocol violation\n"); - longjmp(toplevel, -1); - } - waitforoack = 0; - parseoack(&dp->th_stuff, n - 2); - ap->th_opcode = htons((u_short)ACK); - ap->th_block = htons(0); - size = 4; - goto send_ack; - } - } - /* size = write(fd, dp->th_data, n - 4); */ - size = writeit(file, &dp, n - 4, convert); - if (size < 0) { - nak(errno + 100); - break; - } - amount += size; - } while (size == segsize); -abort: /* ok to ack, since user */ - ap->th_opcode = htons((u_short)ACK); /* has seen err msg */ - ap->th_block = htons(block); - (void) sendto(f, ackbuf, 4, 0, (struct sockaddr *)&sin, sizeof (sin)); - write_behind(file, convert); /* flush last buffer */ - fclose(file); - stopclock(); - if (amount > 0) - printstats("Received", amount); -} - -makerequest(request, name, tp, mode) - int request; - char *name, *mode; - struct tftphdr *tp; -{ - register char *cp; - - tp->th_opcode = htons((u_short)request); - cp = tp->th_stuff; - strcpy(cp, name); - cp += strlen(name); - *cp++ = '\0'; - strcpy(cp, mode); - cp += strlen(mode); - *cp++ = '\0'; - strcpy(cp, "blksize"); - cp += 7; - *cp++ = '\0'; - sprintf(cp, "%d", segsize); - cp += strlen(cp) + 1; - return (cp - (char *)tp); -} - -struct errmsg { - int e_code; - const char *e_msg; -} errmsgs[] = { - { EUNDEF, "Undefined error code" }, - { ENOTFOUND, "File not found" }, - { EACCESS, "Access violation" }, - { ENOSPACE, "Disk full or allocation exceeded" }, - { EBADOP, "Illegal TFTP operation" }, - { EBADID, "Unknown transfer ID" }, - { EEXISTS, "File already exists" }, - { ENOUSER, "No such user" }, - { -1, 0 } -}; - -/* - * Send a nak packet (error message). - * Error code passed in is one of the - * standard TFTP codes, or a UNIX errno - * offset by 100. - */ -nak(error) - int error; -{ - register struct tftphdr *tp; - int length; - register struct errmsg *pe; -/* extern char *sys_errlist[]; */ - - tp = (struct tftphdr *)ackbuf; - tp->th_opcode = htons((u_short)ERROR); - tp->th_code = htons((u_short)error); - for (pe = errmsgs; pe->e_code >= 0; pe++) - if (pe->e_code == error) - break; - if (pe->e_code < 0) { - pe->e_msg = sys_errlist[error - 100]; - tp->th_code = EUNDEF; - } - strcpy(tp->th_msg, pe->e_msg); - length = strlen(pe->e_msg) + 4; - if (trace) - tpacket("sent", tp, length); - if (sendto(f, ackbuf, length, 0, (struct sockaddr *)&sin, sizeof (sin)) - != length) - perror("nak"); -} - -topts(cp, sz) - char *cp; - int sz; -{ - int n, i = 0; - - while (sz > 0 && *cp) { - n = strnlen(cp, sz); - if (n > 0) { - printf("%s%s=", i++ ? ", " : "", cp); - cp += n + 1; - sz -= n + 1; - if (sz <= 0) - break; - n = strnlen(cp, sz); - if (n > 0) - printf("%s", cp); - } - cp += n + 1; - sz -= n + 1; - } -} - -tpacket(s, tp, n) - char *s; - struct tftphdr *tp; - int n; -{ - static char *opcodes[] = - { "#0", "RRQ", "WRQ", "DATA", "ACK", "ERROR", "OACK" }; - register char *cp, *file; - u_short op = ntohs(tp->th_opcode); - char *index(); - - if (op < RRQ || op > OACK) - printf("%s opcode=%x ", s, op); - else - printf("%s %s ", s, opcodes[op]); - switch (op) { - - case RRQ: - case WRQ: - n -= 2; - file = cp = tp->th_stuff; - cp = index(cp, '\0'); - printf("<file=%s, mode=%s, opts: ", file, cp + 1); - topts(index(cp + 1, '\000') + 1, n - strlen(file) - - strlen(cp + 1) - 2); - printf(">\n"); - break; - - case DATA: - printf("<block=%d, %d bytes>\n", ntohs(tp->th_block), n - 4); - break; - - case ACK: - printf("<block=%d>\n", ntohs(tp->th_block)); - break; - - case ERROR: - printf("<code=%d, msg=%s>\n", ntohs(tp->th_code), tp->th_msg); - break; - case OACK: - printf("<"); - topts(tp->th_stuff, n - 2); - printf(">\n"); - break; - } -} - -struct timeval tstart; -struct timeval tstop; -struct timezone zone; - -startclock() { - gettimeofday(&tstart, &zone); -} - -stopclock() { - gettimeofday(&tstop, &zone); -} - -printstats(direction, amount) -char *direction; -unsigned long amount; -{ - double delta; - /* compute delta in 1/10's second units */ - delta = ((tstop.tv_sec*10.)+(tstop.tv_usec/100000)) - - ((tstart.tv_sec*10.)+(tstart.tv_usec/100000)); - delta = delta/10.; /* back to seconds */ - printf("%s %ld bytes in %.1f seconds", direction, amount, delta); - if ((verbose) && (delta >= 0.1)) - printf(" [%.0f bits/sec]", (amount*8.)/delta); - putchar('\n'); -} - diff --git a/gpxe/contrib/tftp/tftpd.8 b/gpxe/contrib/tftp/tftpd.8 deleted file mode 100644 index 6a154c10..00000000 --- a/gpxe/contrib/tftp/tftpd.8 +++ /dev/null @@ -1,75 +0,0 @@ -.\" Copyright (c) 1983 The Regents of the University of California. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms are permitted -.\" provided that the above copyright notice and this paragraph are -.\" duplicated in all such forms and that any documentation, -.\" advertising materials, and other materials related to such -.\" distribution and use acknowledge that the software was developed -.\" by the University of California, Berkeley. The name of the -.\" University may not be used to endorse or promote products derived -.\" from this software without specific prior written permission. -.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -.\" -.\" @(#)tftpd.8 6.3 (Berkeley) 9/20/88 -.\" -.TH TFTPD 8 "September 20, 1988" -.UC 5 -.SH NAME -tftpd \- DARPA Trivial File Transfer Protocol server -.SH SYNOPSIS -.B /etc/tftpd -[ -.SM \-c -<rootdir> ] [ -.SM \-d -] [ -.SM \-r -<filter> ] -.SH DESCRIPTION -.I Tftpd -is a server which supports the DARPA Trivial File Transfer -Protocol. -The TFTP server operates -at the port indicated in the ``tftp'' service description; -see -.IR services (5). -The server is normally started by -.IR inetd (8). -.PP -The use of -.I tftp -does not require an account or password on the remote system. -Due to the lack of authentication information, -.I tftpd -will allow only publicly readable files to be -accessed. -Files may be written only if they already exist and are publicly writable. -Note that this extends the concept of ``public'' to include -all users on all hosts that can be reached through the network; -this may not be appropriate on all systems, and its implications -should be considered before enabling tftp service. -The server should have the user ID with the lowest possible privilege. -.SH OPTIONS -.TP -.B \-c -Pathname of a directory that is considered the rootdirectory for all -transfers. N.B. -.I tftpd -does not actually perform a -.IR chroot (2) -call; you should be aware of the security implications and you -probably should run the server from an unpriviledged account. -.TP -.B \-d -Increased debugging level. -.TP -.B \-r -Pathname of a file that is considered to be a filter program. Whenever -a client tries to download this file, the filter will be started and -its output is send to the client. An arbitrary amount of these -filters can be specified. -.SH "SEE ALSO" -tftp(1), inetd(8) diff --git a/gpxe/contrib/tftp/tftpd.c b/gpxe/contrib/tftp/tftpd.c deleted file mode 100644 index 325a7134..00000000 --- a/gpxe/contrib/tftp/tftpd.c +++ /dev/null @@ -1,742 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1983 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)tftpd.c 5.8 (Berkeley) 6/18/88"; -#endif /* not lint */ - -/* - * Trivial file transfer protocol server. - * - * This version includes many modifications by Jim Guyton <guyton@rand-unix> - * - * Further modifications by Markus Gutschke <gutschk@math.uni-muenster.de> - * - RFC1782 option parsing - * - RFC1783 extended blocksize - * - "-c" option for changing the root directory - * - "-d" option for debugging output - */ - -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <sys/wait.h> -#include <sys/stat.h> - -#include <netinet/in.h> - -#include <arpa/tftp.h> - -#include <alloca.h> -#include <string.h> -#include <signal.h> -#include <stdio.h> -#include <errno.h> -#include <ctype.h> -#include <netdb.h> -#include <setjmp.h> -#include <syslog.h> - -#define TIMEOUT 5 - -#ifndef OACK -#define OACK 06 -#endif - -#ifndef EOPTNEG -#define EOPTNEG 8 -#endif - -extern int errno; -struct sockaddr_in sin = { AF_INET }; -int peer; -int rexmtval = TIMEOUT; -int maxtimeout = 5*TIMEOUT; - -#define PKTSIZE (1432+4) /* SEGSIZE+4 */ -int segsize = SEGSIZE; -char buf[PKTSIZE]; -char ackbuf[PKTSIZE]; -struct sockaddr_in from; -int fromlen; - -char *rootdir = NULL; -int debug = 0; - -struct filters { - struct filters *next; - char *fname; -} *filters = NULL; -int isfilter = 0; - -main(argc, argv) - char *argv[]; -{ - register struct tftphdr *tp; - register int n; - int on = 1; - extern int optind; - extern char *optarg; - - openlog(argv[0], LOG_PID, LOG_DAEMON); - - while ((n = getopt(argc, argv, "c:dr:")) >= 0) { - switch (n) { - case 'c': - if (rootdir) - goto usage; - rootdir = optarg; - break; - case 'd': - debug++; - break; - case 'r': { - struct filters *fp = (void *) - malloc(sizeof(struct filters) + - strlen(optarg) + 1); - fp->next = filters; - fp->fname = (char *)(fp + 1); - strcpy(fp->fname, optarg); - filters = fp; - break; } - default: - usage: - syslog(LOG_ERR, "Usage: %s [-c chroot] " - "[-r readfilter] [-d]\n", - argv[0]); - exit(1); - } - } - if (argc-optind != 0) - goto usage; - - ioctl(0, FIONBIO, &on); -/* if (ioctl(0, FIONBIO, &on) < 0) { - syslog(LOG_ERR, "ioctl(FIONBIO): %m\n"); - exit(1); - } -*/ - fromlen = sizeof (from); - n = recvfrom(0, buf, segsize+4, 0, - (struct sockaddr *)&from, &fromlen); - if (n < 0) { - syslog(LOG_ERR, "recvfrom: %m\n"); - exit(1); - } - /* - * Now that we have read the message out of the UDP - * socket, we fork and exit. Thus, inetd will go back - * to listening to the tftp port, and the next request - * to come in will start up a new instance of tftpd. - * - * We do this so that inetd can run tftpd in "wait" mode. - * The problem with tftpd running in "nowait" mode is that - * inetd may get one or more successful "selects" on the - * tftp port before we do our receive, so more than one - * instance of tftpd may be started up. Worse, if tftpd - * break before doing the above "recvfrom", inetd would - * spawn endless instances, clogging the system. - */ - { - int pid; - int i, j; - - for (i = 1; i < 20; i++) { - pid = fork(); - if (pid < 0) { - sleep(i); - /* - * flush out to most recently sent request. - * - * This may drop some request, but those - * will be resent by the clients when - * they timeout. The positive effect of - * this flush is to (try to) prevent more - * than one tftpd being started up to service - * a single request from a single client. - */ - j = sizeof from; - i = recvfrom(0, buf, segsize+4, 0, - (struct sockaddr *)&from, &j); - if (i > 0) { - n = i; - fromlen = j; - } - } else { - break; - } - } - if (pid < 0) { - syslog(LOG_ERR, "fork: %m\n"); - exit(1); - } else if (pid != 0) { - exit(0); - } - } - from.sin_family = AF_INET; - alarm(0); - close(0); - close(1); - peer = socket(AF_INET, SOCK_DGRAM, 0); - if (peer < 0) { - syslog(LOG_ERR, "socket: %m\n"); - exit(1); - } - if (bind(peer, (struct sockaddr *)&sin, sizeof (sin)) < 0) { - syslog(LOG_ERR, "bind: %m\n"); - exit(1); - } - if (connect(peer, (struct sockaddr *)&from, sizeof(from)) < 0) { - syslog(LOG_ERR, "connect: %m\n"); - exit(1); - } - tp = (struct tftphdr *)buf; - tp->th_opcode = ntohs(tp->th_opcode); - if (tp->th_opcode == RRQ || tp->th_opcode == WRQ) - tftp(tp, n); - exit(1); -} - -int validate_access(); -int sendfile(), recvfile(); - -struct formats { - char *f_mode; - int (*f_validate)(); - int (*f_send)(); - int (*f_recv)(); - int f_convert; -} formats[] = { - { "netascii", validate_access, sendfile, recvfile, 1 }, - { "octet", validate_access, sendfile, recvfile, 0 }, -#ifdef notdef - { "mail", validate_user, sendmail, recvmail, 1 }, -#endif - { 0 } -}; - -int set_blksize(); - -struct options { - char *o_opt; - int (*o_fnc)(); -} options[] = { - { "blksize", set_blksize }, - { 0 } -}; - -/* - * Set a non-standard block size (c.f. RFC1783) - */ - -set_blksize(val, ret) - char *val; - char **ret; -{ - static char b_ret[5]; - int sz = atoi(val); - - if (sz < 8) { - if (debug) - syslog(LOG_ERR, "Requested packetsize %d < 8\n", sz); - return(0); - } else if (sz > PKTSIZE-4) { - if (debug) - syslog(LOG_INFO, "Requested packetsize %d > %d\n", - sz, PKTSIZE-4); - sz = PKTSIZE-4; - } else if (debug) - syslog(LOG_INFO, "Adjusted packetsize to %d octets\n", sz); - - segsize = sz; - sprintf(*ret = b_ret, "%d", sz); - return(1); -} - -/* - * Parse RFC1782 style options - */ - -do_opt(opt, val, ap) - char *opt; - char *val; - char **ap; -{ - struct options *po; - char *ret; - - for (po = options; po->o_opt; po++) - if (strcasecmp(po->o_opt, opt) == 0) { - if (po->o_fnc(val, &ret)) { - if (*ap + strlen(opt) + strlen(ret) + 2 >= - ackbuf + sizeof(ackbuf)) { - if (debug) - syslog(LOG_ERR, - "Ackbuf overflow\n"); - nak(ENOSPACE); - exit(1); - } - *ap = strrchr(strcpy(strrchr(strcpy(*ap, opt), - '\000')+1, val), - '\000')+1; - } else { - nak(EOPTNEG); - exit(1); - } - break; - } - if (debug && !po->o_opt) - syslog(LOG_WARNING, "Unhandled option: %d = %d\n", opt, val); - return; -} - -/* - * Handle initial connection protocol. - */ -tftp(tp, size) - struct tftphdr *tp; - int size; -{ - register char *cp; - int argn = 0, ecode; - register struct formats *pf; - char *filename, *mode; - char *val, *opt; - char *ap = ackbuf+2; - int isopts; - - ((struct tftphdr *)ackbuf)->th_opcode = ntohs(OACK); - filename = cp = tp->th_stuff; -again: - while (cp < buf + size) { - if (*cp == '\0') - break; - cp++; - } - if (*cp != '\0') { - if (debug) - syslog(LOG_WARNING, "Received illegal request\n"); - nak(EBADOP); - exit(1); - } - if (!argn++) { - mode = ++cp; - goto again; - } else { - if (debug && argn == 3) - syslog(LOG_INFO, "Found RFC1782 style options\n"); - *(argn & 1 ? &val : &opt) = ++cp; - if (argn & 1) - do_opt(opt, val, &ap); - if (cp < buf + size && *cp != '\000') - goto again; - } - - for (cp = mode; *cp; cp++) - if (isupper(*cp)) - *cp = tolower(*cp); - for (pf = formats; pf->f_mode; pf++) - if (strcmp(pf->f_mode, mode) == 0) - break; - if (pf->f_mode == 0) { - if (debug) - syslog(LOG_WARNING, "Unknown data format: %s\n", mode); - nak(EBADOP); - exit(1); - } - - if (rootdir) { - cp = alloca(strlen(rootdir) + strlen(filename) + 1); - if (cp == NULL) { - nak(100+ENOMEM); - exit(1); - } - if (*filename != '/') { - if (debug) - syslog(LOG_ERR, - "Filename has to be absolute: %s\n", - filename); - nak(EACCESS); - exit(1); - } - filename = strcat(strcpy(cp, rootdir), filename); - } - - ecode = (*pf->f_validate)(filename, tp->th_opcode); - if (ecode) { - nak(ecode, ERROR); - exit(1); - } - isopts = ap != (ackbuf+2); - (tp->th_opcode == WRQ ? *pf->f_recv : *pf->f_send) - (pf, isopts ? ackbuf : NULL, isopts ? ap-ackbuf : 0); - exit(0); -} - - -FILE *file; - -/* - * Validate file access. Since we - * have no uid or gid, for now require - * file to exist and be publicly - * readable/writable. - * Note also, full path name must be - * given as we have no login directory. - */ -validate_access(filename, mode) - char *filename; - int mode; -{ - struct stat stbuf; - int fd; - char *cp; - - isfilter = 0; - if (mode == RRQ) { - struct filters *fp = filters; - for (; fp; fp = fp->next) { - if (!strcmp(fp->fname, - filename + - (rootdir ? strlen(rootdir) : 0))) { - if (debug) - syslog(LOG_INFO, "Opening input " - "filter: %s\n", filename); - if ((file = popen(filename, "r")) == NULL) { - syslog(LOG_ERR, "Failed to open input " - "filter\n"); - return (EACCESS); } - fd = fileno(file); - isfilter = 1; - return (0); - } - } - } - - if (*filename != '/') { - if (debug) - syslog(LOG_ERR, "Filename has to be absolute: %s\n", - filename); - return (EACCESS); - } - for (cp = filename; *cp; cp++) - if (*cp == '~' || *cp == '$' || - (*cp == '/' && cp[1] == '.' && cp[2] == '.')) { - if (debug) - syslog(LOG_ERR, "Illegal filename: %s\n", - filename); - return (EACCESS); - } - if (debug) - syslog(LOG_INFO, "Validating \"%s\" for %sing\n", - filename, mode == RRQ ? "read" : "writ"); - if (stat(filename, &stbuf) < 0) - return (errno == ENOENT ? ENOTFOUND : EACCESS); - if (mode == RRQ) { - if ((stbuf.st_mode&(S_IREAD >> 6)) == 0) - return (EACCESS); - } else { - if ((stbuf.st_mode&(S_IWRITE >> 6)) == 0) - return (EACCESS); - } - fd = open(filename, mode == RRQ ? 0 : 1); - if (fd < 0) - return (errno + 100); - file = fdopen(fd, (mode == RRQ)? "r":"w"); - if (file == NULL) { - return errno+100; - } - return (0); -} - -int timeout; -jmp_buf timeoutbuf; - -void timer(int sig) -{ - - timeout += rexmtval; - if (timeout >= maxtimeout) { - if (debug) - syslog(LOG_WARNING, "Timeout!\n"); - exit(1); - } - longjmp(timeoutbuf, 1); -} - -/* - * Send the requested file. - */ -sendfile(pf, oap, oacklen) - struct formats *pf; - struct tftphdr *oap; - int oacklen; -{ - struct tftphdr *dp, *r_init(); - register struct tftphdr *ap; /* ack packet */ - register int size, n; - u_short block = 1; - - signal(SIGALRM, timer); - - ap = (struct tftphdr *)ackbuf; - - if (oap) { - timeout = 0; - (void) setjmp(timeoutbuf); - oack: - if (send(peer, oap, oacklen, 0) != oacklen) { - syslog(LOG_ERR, "tftpd: write: %m\n"); - goto abort; - } - for ( ; ; ) { - alarm(rexmtval); - n = recv(peer, ackbuf, sizeof (ackbuf), 0); - alarm(0); - if (n < 0) { - syslog(LOG_ERR, "tftpd: read: %m\n"); - goto abort; - } - ap->th_opcode = ntohs((u_short)ap->th_opcode); - ap->th_block = ntohs(ap->th_block); - - if (ap->th_opcode == ERROR) { - if (debug) - syslog(LOG_ERR, "Client does not " - "accept options\n"); - goto abort; } - - if (ap->th_opcode == ACK) { - if (ap->th_block == 0) { - if (debug) - syslog(LOG_DEBUG, - "RFC1782 option " - "negotiation " - "succeeded\n"); - break; - } - /* Re-synchronize with the other side */ - (void) synchnet(peer); - goto oack; - } - } - } - - dp = r_init(); - do { - size = readit(file, &dp, pf->f_convert); - if (size < 0) { - nak(errno + 100); - goto abort; - } - dp->th_opcode = htons((u_short)DATA); - dp->th_block = htons(block); - timeout = 0; - (void) setjmp(timeoutbuf); - -send_data: - if (send(peer, dp, size + 4, 0) != size + 4) { - syslog(LOG_ERR, "tftpd: write: %m\n"); - goto abort; - } - read_ahead(file, pf->f_convert); - for ( ; ; ) { - alarm(rexmtval); /* read the ack */ - n = recv(peer, ackbuf, sizeof (ackbuf), 0); - alarm(0); - if (n < 0) { - syslog(LOG_ERR, "tftpd: read: %m\n"); - goto abort; - } - ap->th_opcode = ntohs((u_short)ap->th_opcode); - ap->th_block = ntohs(ap->th_block); - - if (ap->th_opcode == ERROR) - goto abort; - - if (ap->th_opcode == ACK) { - if (ap->th_block == block) { - break; - } - /* Re-synchronize with the other side */ - (void) synchnet(peer); - if (ap->th_block == (block -1)) { - goto send_data; - } - } - - } - block++; - } while (size == segsize); -abort: - if (isfilter) - pclose(file); - else - (void) fclose(file); - isfilter = 0; -} - -void justquit(int sig) -{ - exit(0); -} - - -/* - * Receive a file. - */ -recvfile(pf, oap, oacklen) - struct formats *pf; - struct tftphdr *oap; - int oacklen; -{ - struct tftphdr *dp, *w_init(); - register struct tftphdr *ap; /* ack buffer */ - register int acksize, n, size; - u_short block = 0; - - signal(SIGALRM, timer); - dp = w_init(); - do { - timeout = 0; - - if (!block++ && oap) { - ap = (struct tftphdr *)oap; - acksize = oacklen; - } else { - ap = (struct tftphdr *)ackbuf; - ap->th_opcode = htons((u_short)ACK); - ap->th_block = htons(block-1); - acksize = 4; - } - (void) setjmp(timeoutbuf); -send_ack: - if (send(peer, (char *)ap, acksize, 0) != acksize) { - syslog(LOG_ERR, "tftpd: write: %m\n"); - goto abort; - } - write_behind(file, pf->f_convert); - for ( ; ; ) { - alarm(rexmtval); - n = recv(peer, dp, segsize+4, 0); - alarm(0); - if (n < 0) { /* really? */ - syslog(LOG_ERR, "tftpd: read: %m\n"); - goto abort; - } - dp->th_opcode = ntohs((u_short)dp->th_opcode); - dp->th_block = ntohs(dp->th_block); - if (dp->th_opcode == ERROR) - goto abort; - if (dp->th_opcode == DATA) { - if (dp->th_block == block) { - break; /* normal */ - } - /* Re-synchronize with the other side */ - (void) synchnet(peer); - if (dp->th_block == (block-1)) - goto send_ack; /* rexmit */ - } - } - /* size = write(file, dp->th_data, n - 4); */ - size = writeit(file, &dp, n - 4, pf->f_convert); - if (size != (n-4)) { /* ahem */ - if (size < 0) nak(errno + 100); - else nak(ENOSPACE); - goto abort; - } - } while (size == segsize); - write_behind(file, pf->f_convert); - if (isfilter) - pclose(file); - else - (void) fclose(file); /* close data file */ - isfilter = 0; - - ap = (struct tftphdr *)ackbuf; - ap->th_opcode = htons((u_short)ACK); /* send the "final" ack */ - ap->th_block = htons(block); - (void) send(peer, ackbuf, 4, 0); - - signal(SIGALRM, justquit); /* just quit on timeout */ - alarm(rexmtval); - n = recv(peer, buf, segsize, 0); /* normally times out and quits */ - alarm(0); - if (n >= 4 && /* if read some data */ - dp->th_opcode == DATA && /* and got a data block */ - block == dp->th_block) { /* then my last ack was lost */ - (void) send(peer, ackbuf, 4, 0); /* resend final ack */ - } -abort: - return; -} - -struct errmsg { - int e_code; - const char *e_msg; -} errmsgs[] = { - { EUNDEF, "Undefined error code" }, - { ENOTFOUND, "File not found" }, - { EACCESS, "Access violation" }, - { ENOSPACE, "Disk full or allocation exceeded" }, - { EBADOP, "Illegal TFTP operation" }, - { EBADID, "Unknown transfer ID" }, - { EEXISTS, "File already exists" }, - { ENOUSER, "No such user" }, - { EOPTNEG, "Failure to negotiate RFC1782 options" }, - { -1, 0 } -}; - -/* - * Send a nak packet (error message). - * Error code passed in is one of the - * standard TFTP codes, or a UNIX errno - * offset by 100. - */ -nak(error) - int error; -{ - register struct tftphdr *tp; - int length; - register struct errmsg *pe; -/* extern char *sys_errlist[]; */ - - tp = (struct tftphdr *)buf; - tp->th_opcode = htons((u_short)ERROR); - tp->th_code = htons((u_short)error); - for (pe = errmsgs; pe->e_code >= 0; pe++) - if (pe->e_code == error) - break; - if (pe->e_code < 0) { - pe->e_msg = sys_errlist[error -100]; - tp->th_code = EUNDEF; /* set 'undef' errorcode */ - } - strcpy(tp->th_msg, pe->e_msg); - length = strlen(pe->e_msg); - tp->th_msg[length] = '\0'; - length += 5; - if (debug) - syslog(LOG_ERR, "Negative acknowledge: %s\n", tp->th_msg); - if (send(peer, buf, length, 0) != length) - syslog(LOG_ERR, "nak: %m\n"); -} diff --git a/gpxe/contrib/tftp/tftpsubs.c b/gpxe/contrib/tftp/tftpsubs.c deleted file mode 100644 index 608d64ec..00000000 --- a/gpxe/contrib/tftp/tftpsubs.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -static char sccsid[] = "@(#)tftpsubs.c 5.4 (Berkeley) 6/29/88"; -#endif /* not lint */ - -/* Simple minded read-ahead/write-behind subroutines for tftp user and - server. Written originally with multiple buffers in mind, but current - implementation has two buffer logic wired in. - - Todo: add some sort of final error check so when the write-buffer - is finally flushed, the caller can detect if the disk filled up - (or had an i/o error) and return a nak to the other side. - - Jim Guyton 10/85 - */ - -#include <errno.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <netinet/in.h> -#include <arpa/tftp.h> -#include <stdio.h> - -#define PKTSIZE (1432+4) /* SEGSIZE+4 */ /* should be moved to tftp.h */ - -struct bf { - int counter; /* size of data in buffer, or flag */ - char buf[PKTSIZE]; /* room for data packet */ -} bfs[2]; - - /* Values for bf.counter */ -#define BF_ALLOC -3 /* alloc'd but not yet filled */ -#define BF_FREE -2 /* free */ -/* [-1 .. SEGSIZE] = size of data in the data buffer */ - -extern int segsize; - -static int nextone; /* index of next buffer to use */ -static int current; /* index of buffer in use */ - - /* control flags for crlf conversions */ -int newline = 0; /* fillbuf: in middle of newline expansion */ -int prevchar = -1; /* putbuf: previous char (cr check) */ - -struct tftphdr *rw_init(); - -struct tftphdr *w_init() { return rw_init(0); } /* write-behind */ -struct tftphdr *r_init() { return rw_init(1); } /* read-ahead */ - -struct tftphdr * -rw_init(x) /* init for either read-ahead or write-behind */ -int x; /* zero for write-behind, one for read-head */ -{ - newline = 0; /* init crlf flag */ - prevchar = -1; - bfs[0].counter = BF_ALLOC; /* pass out the first buffer */ - current = 0; - bfs[1].counter = BF_FREE; - nextone = x; /* ahead or behind? */ - return (struct tftphdr *)bfs[0].buf; -} - - -/* Have emptied current buffer by sending to net and getting ack. - Free it and return next buffer filled with data. - */ -readit(file, dpp, convert) - FILE *file; /* file opened for read */ - struct tftphdr **dpp; - int convert; /* if true, convert to ascii */ -{ - struct bf *b; - - bfs[current].counter = BF_FREE; /* free old one */ - current = !current; /* "incr" current */ - - b = &bfs[current]; /* look at new buffer */ - if (b->counter == BF_FREE) /* if it's empty */ - read_ahead(file, convert); /* fill it */ -/* assert(b->counter != BF_FREE); /* check */ - *dpp = (struct tftphdr *)b->buf; /* set caller's ptr */ - return b->counter; -} - -/* - * fill the input buffer, doing ascii conversions if requested - * conversions are lf -> cr,lf and cr -> cr, nul - */ -read_ahead(file, convert) - FILE *file; /* file opened for read */ - int convert; /* if true, convert to ascii */ -{ - register int i; - register char *p; - register int c; - struct bf *b; - struct tftphdr *dp; - - b = &bfs[nextone]; /* look at "next" buffer */ - if (b->counter != BF_FREE) /* nop if not free */ - return; - nextone = !nextone; /* "incr" next buffer ptr */ - - dp = (struct tftphdr *)b->buf; - - if (convert == 0) { - int i; - b->counter = 0; - do { - i = read(fileno(file), dp->th_data + b->counter, - segsize - b->counter); - if (i > 0) - b->counter += i; - } while (i != 0 && !(i < 0 && errno != EINTR) && - b->counter < segsize); - return; - } - - p = dp->th_data; - for (i = 0 ; i < segsize; i++) { - if (newline) { - if (prevchar == '\n') - c = '\n'; /* lf to cr,lf */ - else c = '\0'; /* cr to cr,nul */ - newline = 0; - } - else { - c = getc(file); - if (c == EOF) break; - if (c == '\n' || c == '\r') { - prevchar = c; - c = '\r'; - newline = 1; - } - } - *p++ = c; - } - b->counter = (int)(p - dp->th_data); -} - -/* Update count associated with the buffer, get new buffer - from the queue. Calls write_behind only if next buffer not - available. - */ -writeit(file, dpp, ct, convert) - FILE *file; - struct tftphdr **dpp; - int convert; -{ - bfs[current].counter = ct; /* set size of data to write */ - current = !current; /* switch to other buffer */ - if (bfs[current].counter != BF_FREE) /* if not free */ - write_behind(file, convert); /* flush it */ - bfs[current].counter = BF_ALLOC; /* mark as alloc'd */ - *dpp = (struct tftphdr *)bfs[current].buf; - return ct; /* this is a lie of course */ -} - -/* - * Output a buffer to a file, converting from netascii if requested. - * CR,NUL -> CR and CR,LF => LF. - * Note spec is undefined if we get CR as last byte of file or a - * CR followed by anything else. In this case we leave it alone. - */ -write_behind(file, convert) - FILE *file; - int convert; -{ - char *buf; - int count; - register int ct; - register char *p; - register int c; /* current character */ - struct bf *b; - struct tftphdr *dp; - - b = &bfs[nextone]; - if (b->counter < -1) /* anything to flush? */ - return 0; /* just nop if nothing to do */ - - count = b->counter; /* remember byte count */ - b->counter = BF_FREE; /* reset flag */ - dp = (struct tftphdr *)b->buf; - nextone = !nextone; /* incr for next time */ - buf = dp->th_data; - - if (count <= 0) return -1; /* nak logic? */ - - if (convert == 0) - return write(fileno(file), buf, count); - - p = buf; - ct = count; - while (ct--) { /* loop over the buffer */ - c = *p++; /* pick up a character */ - if (prevchar == '\r') { /* if prev char was cr */ - if (c == '\n') /* if have cr,lf then just */ - fseek(file, -1, 1); /* smash lf on top of the cr */ - else - if (c == '\0') /* if have cr,nul then */ - goto skipit; /* just skip over the putc */ - /* else just fall through and allow it */ - } - putc(c, file); -skipit: - prevchar = c; - } - return count; -} - - -/* When an error has occurred, it is possible that the two sides - * are out of synch. Ie: that what I think is the other side's - * response to packet N is really their response to packet N-1. - * - * So, to try to prevent that, we flush all the input queued up - * for us on the network connection on our host. - * - * We return the number of packets we flushed (mostly for reporting - * when trace is active). - */ - -int -synchnet(f) -int f; /* socket to flush */ -{ - int i, j = 0; - char rbuf[PKTSIZE]; - struct sockaddr_in from; - int fromlen; - - while (1) { - (void) ioctl(f, FIONREAD, &i); - if (i) { - j++; - fromlen = sizeof from; - (void) recvfrom(f, rbuf, sizeof (rbuf), 0, - (struct sockaddr *)&from, &fromlen); - } else { - return(j); - } - } -} diff --git a/gpxe/contrib/tomsrtbt/tomsrtbt-net.txt b/gpxe/contrib/tomsrtbt/tomsrtbt-net.txt deleted file mode 100644 index c5e1b0f2..00000000 --- a/gpxe/contrib/tomsrtbt/tomsrtbt-net.txt +++ /dev/null @@ -1,37 +0,0 @@ -Notes on turning tomsrtbt El Torito into a Etherboot image: - -0. Tomsrtbt (http://www.toms.net/) is an all-purpose rescue and utility -1-floppy Linux system. You can read all about it at the web site. These -notes explain how to turn the El Torito version of it into a netbootable -image for Etherboot. Note that the .img file is not an ISO image, it is -a 2.88M floppy emulation image for writing onto a CD-R(W) with mkisofs. -It's actually a minix filesystem. Inside it are the kernel bz2bzImage -and initrd.bz2. - -1. First uncompress the .img: - - bunzip2 tomsrtbt-2.0.103.ElTorito.288.img.bz2 - -2. Mount the image using loopback. You probably need to be root to do -this: - - mount -o ro,loop tomsrtbt-2.0.103.ElTorito.288.img /media/floppy - -I've specified /media/floppy which is the floppy mount point for my -system, but any convenient directory will do. - -3. Copy the kernel image and initrd off it: - - cp -p /media/floppy/bz2bzImage /media/floppy/initrd.bz2 . - -4. Use mkelf-linux (or mknbi-linux) to make a netbootable image: - -mkelf-linux --append='root=100' bz2bzImage initrd.bz2 > tomsrtbt.nb - -root=100 means use /dev/ram0 (device 1,0) as the root device. - -5. That's it. Clean up by unmounting the .img: - - umount /media/cdrom - -tomsrtbt.nb can now be loaded with Etherboot. Have fun. diff --git a/gpxe/contrib/wakeonlan/README b/gpxe/contrib/wakeonlan/README deleted file mode 100644 index 5b03f9b8..00000000 --- a/gpxe/contrib/wakeonlan/README +++ /dev/null @@ -1,40 +0,0 @@ -From level42@sympatico.ca Tue Mar 18 04:35:31 2008 -Date: Mon, 17 Mar 2008 23:47:39 -0400 -From: Bill <level42@sympatico.ca> -To: etherboot-developers@lists.sourceforge.net -Subject: [Etherboot-developers] WOL Routine - -Attached is a WOL routine that can be used to wake a remote server from -gpxe. I put wol.c in src/usr and wol.h in src/include/usr. This is really -in improved replacement of that in contrib\wakeonlan\wakeserver.patch. This -version will no longer work since the eth_transmit routine no longer works -with the newer driver arhitecture such as the e1000 driver. - -Please consider adding it to gpxe preferrably in the main src directory or -in the contrib directory. - -Thank you - - - [ Part 2, Text/PLAIN (Name: "wol.c") 109 lines. ]
- [ Unable to print this part. ] - - - [ Part 3, Text/PLAIN (Name: "wol.h") 12 lines. ]
- [ Unable to print this part. ] - - - [ Part 4: "Attached Text" ] - -------------------------------------------------------------------------- -This SF.net email is sponsored by: Microsoft -Defy all challenges. Microsoft(R) Visual Studio 2008. -http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ - - [ Part 5: "Attached Text" ] - -_______________________________________________ -Etherboot-developers mailing list -Etherboot-developers@lists.sourceforge.net -https://lists.sourceforge.net/lists/listinfo/etherboot-developers - diff --git a/gpxe/contrib/wakeonlan/wol.c b/gpxe/contrib/wakeonlan/wol.c deleted file mode 100644 index 40a8415a..00000000 --- a/gpxe/contrib/wakeonlan/wol.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2008 William Stewart. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <byteswap.h> -#include <gpxe/features.h> -#include <gpxe/netdevice.h> -#include <gpxe/if_ether.h> -#include <gpxe/iobuf.h> -#include <usr/ifmgmt.h> -#include <usr/wol.h> -#include <timer.h> - -/** @file - * - * Wake on lan - * - */ - -/** - * Boot from a network device - * - * @v netdev Network device - * @ret rc Return status code - */ -#define WOL_MSG_LEN (6 + 16*6) - -void wakeup_server(char *server_adr) -{ - int rc, i,j; - unsigned char *buf; - uint8_t eth_broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - unsigned int len; - struct io_buffer *iobuf; - struct ethhdr *ethhdr; - struct net_device *netdev; - - for_each_netdev ( netdev ) { - break; - } - - if (netdev == NULL) - { - printf("Could not find netdev\n"); - return; - } - - /* Open device and display device status */ - if ( (ifopen ( netdev ) ) != 0 ) - { - printf("Could not open netdev\n"); - return; - } - - /* Create outgoing I/O buffer */ - iobuf = alloc_iob ((ETH_HLEN + WOL_MSG_LEN)*2); - if (!iobuf) - { - printf("Could not allocate iob\n"); - return; - } - - ethhdr = iob_put(iobuf, sizeof(*ethhdr)); - - /* Build Ethernet header */ - memcpy (ethhdr->h_dest, eth_broadcast, ETH_ALEN ); - memcpy (ethhdr->h_source, netdev->ll_addr, ETH_ALEN ); - ethhdr->h_protocol = htons (0x0842); - - buf = iob_put (iobuf, WOL_MSG_LEN); - - /* Build the message to send - 6 x 0xff then 16 x dest address */ - len =0; - for (i = 0; i < 6; i++) - buf[len++] = 0xff; - for (j = 0; j < 16; j++) - for (i = 0; i < 6; i++) - buf[len++] = server_adr[i]; - - rc = netdev_tx (netdev, iobuf); - - if (rc !=0) - printf("Failed to transmit WOL packet\n"); - - /* Give the controller a chance to send it before checking */ - mdelay(100); - - netdev_poll(netdev); -} - diff --git a/gpxe/contrib/wakeonlan/wol.h b/gpxe/contrib/wakeonlan/wol.h deleted file mode 100644 index 0bae6b66..00000000 --- a/gpxe/contrib/wakeonlan/wol.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _USR_WOL_H -#define _USR_WOL_H - -/** @file - * - * Wakeon lan - * - */ - -extern void wakeup_server(char *); - -#endif /* _USR_WOL_H */ |