diff options
Diffstat (limited to 'contrib')
47 files changed, 641 insertions, 2182 deletions
diff --git a/contrib/cloud/aws-import b/contrib/cloud/aws-import index ace005870..77c0fd0f7 100755 --- a/contrib/cloud/aws-import +++ b/contrib/cloud/aws-import @@ -22,11 +22,12 @@ def detect_architecture(image): return 'x86_64' -def create_snapshot(region, description, image): +def create_snapshot(region, description, image, tags): """Create an EBS snapshot""" client = boto3.client('ebs', region_name=region) snapshot = client.start_snapshot(VolumeSize=1, - Description=description) + Description=description, + Tags=tags) snapshot_id = snapshot['SnapshotId'] with open(image, 'rb') as fh: for block in count(): @@ -46,21 +47,42 @@ def create_snapshot(region, description, image): return snapshot_id -def import_image(region, name, architecture, image, public, overwrite): - """Import an AMI image""" +def delete_images(region, filters, retain): client = boto3.client('ec2', region_name=region) resource = boto3.resource('ec2', region_name=region) - description = '%s (%s)' % (name, architecture) - images = client.describe_images(Filters=[{'Name': 'name', - 'Values': [description]}]) - if overwrite and images['Images']: - images = images['Images'][0] - image_id = images['ImageId'] - snapshot_id = images['BlockDeviceMappings'][0]['Ebs']['SnapshotId'] + images = client.describe_images(Owners=['self'], Filters=filters) + old_images = sorted(images['Images'], key=lambda x: x['CreationDate']) + if retain > 0: + old_images = old_images[:-retain] + for image in old_images: + image_id = image['ImageId'] + snapshot_id = image['BlockDeviceMappings'][0]['Ebs']['SnapshotId'] resource.Image(image_id).deregister() resource.Snapshot(snapshot_id).delete() + + +def import_image(region, name, family, architecture, image, public, overwrite, + retain): + """Import an AMI image""" + client = boto3.client('ec2', region_name=region) + resource = boto3.resource('ec2', region_name=region) + description = '%s (%s)' % (name, architecture) + tags = [ + {'Key': 'family', 'Value': family}, + {'Key': 'architecture', 'Value': architecture}, + ] + if overwrite: + filters = [{'Name': 'name', 'Values': [description]}] + delete_images(region=region, filters=filters, retain=0) + if retain is not None: + filters = [ + {'Name': 'tag:family', 'Values': [family]}, + {'Name': 'tag:architecture', 'Values': [architecture]}, + {'Name': 'is-public', 'Values': [str(public).lower()]}, + ] + delete_images(region=region, filters=filters, retain=retain) snapshot_id = create_snapshot(region=region, description=description, - image=image) + image=image, tags=tags) client.get_waiter('snapshot_completed').wait(SnapshotIds=[snapshot_id]) image = client.register_image(Architecture=architecture, BlockDeviceMappings=[{ @@ -72,12 +94,19 @@ def import_image(region, name, architecture, image, public, overwrite): }], EnaSupport=True, Name=description, + TagSpecifications=[{ + 'ResourceType': 'image', + 'Tags': tags, + }], RootDeviceName='/dev/sda1', SriovNetSupport='simple', VirtualizationType='hvm') image_id = image['ImageId'] client.get_waiter('image_available').wait(ImageIds=[image_id]) if public: + image_block = client.get_image_block_public_access_state() + if image_block['ImageBlockPublicAccessState'] != 'unblocked': + client.disable_image_block_public_access() resource.Image(image_id).modify_attribute(Attribute='launchPermission', OperationType='add', UserGroups=['all']) @@ -94,10 +123,14 @@ def launch_link(region, image_id): parser = argparse.ArgumentParser(description="Import AWS EC2 image (AMI)") parser.add_argument('--name', '-n', help="Image name") +parser.add_argument('--family', '-f', + help="Image family name") parser.add_argument('--public', '-p', action='store_true', help="Make image public") parser.add_argument('--overwrite', action='store_true', help="Overwrite any existing image with same name") +parser.add_argument('--retain', type=int, metavar='NUM', + help="Retain at most <NUM> old images") parser.add_argument('--region', '-r', action='append', help="AWS region(s)") parser.add_argument('--wiki', '-w', metavar='FILE', @@ -108,9 +141,13 @@ args = parser.parse_args() # Detect CPU architectures architectures = {image: detect_architecture(image) for image in args.image} +# Use default family name if none specified +if not args.family: + args.family = 'iPXE' + # Use default name if none specified if not args.name: - args.name = 'iPXE (%s)' % date.today().strftime('%Y-%m-%d') + args.name = '%s (%s)' % (args.family, date.today().strftime('%Y-%m-%d')) # Use all regions if none specified if not args.region: @@ -123,10 +160,12 @@ with ThreadPoolExecutor(max_workers=len(imports)) as executor: futures = {executor.submit(import_image, region=region, name=args.name, + family=args.family, architecture=architectures[image], image=image, public=args.public, - overwrite=args.overwrite): (region, image) + overwrite=args.overwrite, + retain=args.retain): (region, image) for region, image in imports} results = {futures[future]: future.result() for future in as_completed(futures)} diff --git a/contrib/cloud/gce-import b/contrib/cloud/gce-import new file mode 100755 index 000000000..e7adfee84 --- /dev/null +++ b/contrib/cloud/gce-import @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 + +import argparse +from concurrent.futures import ThreadPoolExecutor, as_completed +from datetime import date +import io +import subprocess +import tarfile +from uuid import uuid4 + +from google.cloud import compute +from google.cloud import exceptions +from google.cloud import storage + +IPXE_STORAGE_PREFIX = 'ipxe-upload-temp-' + +FEATURE_GVNIC = compute.GuestOsFeature(type_="GVNIC") +FEATURE_IDPF = compute.GuestOsFeature(type_="IDPF") +FEATURE_UEFI = compute.GuestOsFeature(type_="UEFI_COMPATIBLE") + +POLICY_PUBLIC = compute.Policy(bindings=[{ + "role": "roles/compute.imageUser", + "members": ["allAuthenticatedUsers"], +}]) + +def delete_temp_bucket(bucket): + """Remove temporary bucket""" + assert bucket.name.startswith(IPXE_STORAGE_PREFIX) + for blob in bucket.list_blobs(prefix=IPXE_STORAGE_PREFIX): + assert blob.name.startswith(IPXE_STORAGE_PREFIX) + blob.delete() + if not list(bucket.list_blobs()): + bucket.delete() + +def create_temp_bucket(location): + """Create temporary bucket (and remove any stale temporary buckets)""" + client = storage.Client() + for bucket in client.list_buckets(prefix=IPXE_STORAGE_PREFIX): + delete_temp_bucket(bucket) + name = '%s%s' % (IPXE_STORAGE_PREFIX, uuid4()) + return client.create_bucket(name, location=location) + +def create_tarball(image): + """Create raw disk image tarball""" + tarball = io.BytesIO() + with tarfile.open(fileobj=tarball, mode='w:gz', + format=tarfile.GNU_FORMAT) as tar: + tar.add(image, arcname='disk.raw') + tarball.seek(0) + return tarball + +def upload_blob(bucket, image): + """Upload raw disk image blob""" + blob = bucket.blob('%s%s.tar.gz' % (IPXE_STORAGE_PREFIX, uuid4())) + tarball = create_tarball(image) + blob.upload_from_file(tarball) + return blob + +def detect_uefi(image): + """Identify UEFI CPU architecture(s)""" + mdir = subprocess.run(['mdir', '-b', '-i', image, '::/EFI/BOOT'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + check=False) + mapping = { + b'BOOTX64.EFI': 'x86_64', + b'BOOTAA64.EFI': 'arm64', + } + uefi = [ + arch + for filename, arch in mapping.items() + if filename in mdir.stdout + ] + return uefi + +def image_architecture(uefi): + """Get image architecture""" + return uefi[0] if len(uefi) == 1 else None if uefi else 'x86_64' + +def image_features(uefi): + """Get image feature list""" + features = [FEATURE_GVNIC, FEATURE_IDPF] + if uefi: + features.append(FEATURE_UEFI) + return features + +def image_name(base, uefi): + """Calculate image name or family name""" + suffix = ('-uefi-%s' % uefi[0].replace('_', '-') if len(uefi) == 1 else + '-uefi-multi' if uefi else '') + return '%s%s' % (base, suffix) + +def create_image(project, basename, basefamily, overwrite, public, bucket, + image): + """Create image""" + client = compute.ImagesClient() + uefi = detect_uefi(image) + architecture = image_architecture(uefi) + features = image_features(uefi) + name = image_name(basename, uefi) + family = image_name(basefamily, uefi) + if overwrite: + try: + client.delete(project=project, image=name).result() + except exceptions.NotFound: + pass + blob = upload_blob(bucket, image) + disk = compute.RawDisk(source=blob.public_url) + image = compute.Image(name=name, family=family, architecture=architecture, + guest_os_features=features, raw_disk=disk) + client.insert(project=project, image_resource=image).result() + if public: + request = compute.GlobalSetPolicyRequest(policy=POLICY_PUBLIC) + client.set_iam_policy(project=project, resource=name, + global_set_policy_request_resource=request) + image = client.get(project=project, image=name) + return image + +# Parse command-line arguments +# +parser = argparse.ArgumentParser(description="Import Google Cloud image") +parser.add_argument('--name', '-n', + help="Base image name") +parser.add_argument('--family', '-f', + help="Base family name") +parser.add_argument('--public', '-p', action='store_true', + help="Make image public") +parser.add_argument('--overwrite', action='store_true', + help="Overwrite any existing image with same name") +parser.add_argument('--project', '-j', default="ipxe-images", + help="Google Cloud project") +parser.add_argument('--location', '-l', + help="Google Cloud Storage initial location") +parser.add_argument('image', nargs='+', help="iPXE disk image") +args = parser.parse_args() + +# Use default family name if none specified +if not args.family: + args.family = 'ipxe' + +# Use default name if none specified +if not args.name: + args.name = '%s-%s' % (args.family, date.today().strftime('%Y%m%d')) + +# Create temporary upload bucket +bucket = create_temp_bucket(args.location) + +# Use one thread per image to maximise parallelism +with ThreadPoolExecutor(max_workers=len(args.image)) as executor: + futures = {executor.submit(create_image, + project=args.project, + basename=args.name, + basefamily=args.family, + overwrite=args.overwrite, + public=args.public, + bucket=bucket, + image=image): image + for image in args.image} + results = {futures[future]: future.result() + for future in as_completed(futures)} + +# Delete temporary upload bucket +delete_temp_bucket(bucket) + +# Show created images +for image in args.image: + result = results[image] + print("%s (%s) %s" % (result.name, result.family, result.status)) diff --git a/contrib/cloud/gce-int13con b/contrib/cloud/gce-int13con new file mode 100755 index 000000000..3b909a44a --- /dev/null +++ b/contrib/cloud/gce-int13con @@ -0,0 +1,146 @@ +#!/usr/bin/env python3 + +import argparse +import textwrap +import time +from uuid import uuid4 + +from google.cloud import compute + +IPXE_LOG_PREFIX = 'ipxe-log-temp-' +IPXE_LOG_MAGIC = 'iPXE LOG' +IPXE_LOG_END = '----- END OF iPXE LOG -----' + +def get_log_disk(instances, project, zone, name): + """Get log disk source URL""" + instance = instances.get(project=project, zone=zone, instance=name) + disk = next(x for x in instance.disks if x.boot) + return disk.source + +def delete_temp_snapshot(snapshots, project, name): + """Delete temporary snapshot""" + assert name.startswith(IPXE_LOG_PREFIX) + snapshots.delete(project=project, snapshot=name) + +def delete_temp_snapshots(snapshots, project): + """Delete all old temporary snapshots""" + filter = "name eq %s.+" % IPXE_LOG_PREFIX + request = compute.ListSnapshotsRequest(project=project, filter=filter) + for snapshot in snapshots.list(request=request): + delete_temp_snapshot(snapshots, project, snapshot.name) + +def create_temp_snapshot(snapshots, project, source): + """Create temporary snapshot""" + name = '%s%s' % (IPXE_LOG_PREFIX, uuid4()) + snapshot = compute.Snapshot(name=name, source_disk=source) + snapshots.insert(project=project, snapshot_resource=snapshot).result() + return name + +def delete_temp_instance(instances, project, zone, name): + """Delete log dumper temporary instance""" + assert name.startswith(IPXE_LOG_PREFIX) + instances.delete(project=project, zone=zone, instance=name) + +def delete_temp_instances(instances, project, zone): + """Delete all old log dumper temporary instances""" + filter = "name eq %s.+" % IPXE_LOG_PREFIX + request = compute.ListInstancesRequest(project=project, zone=zone, + filter=filter) + for instance in instances.list(request=request): + delete_temp_instance(instances, project, zone, instance.name) + +def create_temp_instance(instances, project, zone, family, image, machine, + snapshot): + """Create log dumper temporary instance""" + image = "projects/%s/global/images/family/%s" % (family, image) + machine_type = "zones/%s/machineTypes/%s" % (zone, machine) + logsource = "global/snapshots/%s" % snapshot + bootparams = compute.AttachedDiskInitializeParams(source_image=image) + bootdisk = compute.AttachedDisk(boot=True, auto_delete=True, + initialize_params=bootparams) + logparams = compute.AttachedDiskInitializeParams(source_snapshot=logsource) + logdisk = compute.AttachedDisk(boot=False, auto_delete=True, + initialize_params=logparams, + device_name="ipxelog") + nic = compute.NetworkInterface() + name = '%s%s' % (IPXE_LOG_PREFIX, uuid4()) + script = textwrap.dedent(f""" + #!/bin/sh + tr -d '\\000' < /dev/disk/by-id/google-ipxelog-part3 > /dev/ttyS3 + echo "{IPXE_LOG_END}" > /dev/ttyS3 + """).strip() + items = compute.Items(key="startup-script", value=script) + metadata = compute.Metadata(items=[items]) + instance = compute.Instance(name=name, machine_type=machine_type, + network_interfaces=[nic], metadata=metadata, + disks=[bootdisk, logdisk]) + instances.insert(project=project, zone=zone, + instance_resource=instance).result() + return name + +def get_log_output(instances, project, zone, name): + """Get iPXE log output""" + request = compute.GetSerialPortOutputInstanceRequest(project=project, + zone=zone, port=4, + instance=name) + while True: + log = instances.get_serial_port_output(request=request).contents.strip() + if log.endswith(IPXE_LOG_END): + if log.startswith(IPXE_LOG_MAGIC): + return log[len(IPXE_LOG_MAGIC):-len(IPXE_LOG_END)] + else: + return log[:-len(IPXE_LOG_END)] + time.sleep(1) + +# Parse command-line arguments +# +parser = argparse.ArgumentParser(description="Import Google Cloud image") +parser.add_argument('--project', '-j', default="ipxe-images", + help="Google Cloud project") +parser.add_argument('--zone', '-z', required=True, + help="Google Cloud zone") +parser.add_argument('--family', '-f', default="debian-cloud", + help="Helper OS image family") +parser.add_argument('--image', '-i', default="debian-12", + help="Helper OS image") +parser.add_argument('--machine', '-m', default="e2-micro", + help="Helper machine type") +parser.add_argument('instance', help="Instance name") +args = parser.parse_args() + +# Construct client objects +# +instances = compute.InstancesClient() +snapshots = compute.SnapshotsClient() + +# Clean up old temporary objects +# +delete_temp_instances(instances, project=args.project, zone=args.zone) +delete_temp_snapshots(snapshots, project=args.project) + +# Create log disk snapshot +# +logdisk = get_log_disk(instances, project=args.project, zone=args.zone, + name=args.instance) +logsnap = create_temp_snapshot(snapshots, project=args.project, source=logdisk) + +# Create log dumper instance +# +dumper = create_temp_instance(instances, project=args.project, zone=args.zone, + family=args.family, image=args.image, + machine=args.machine, snapshot=logsnap) + +# Wait for log output +# +output = get_log_output(instances, project=args.project, zone=args.zone, + name=dumper) + +# Print log output +# +print(output) + +# Clean up +# +delete_temp_instance(instances, project=args.project, zone=args.zone, + name=dumper) +delete_temp_snapshot(snapshots, project=args.project, name=logsnap) diff --git a/contrib/crypto/cmsdetach b/contrib/crypto/cmsdetach new file mode 100755 index 000000000..a48d30c67 --- /dev/null +++ b/contrib/crypto/cmsdetach @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +"""Detach CMS encrypted data. + +Detach encrypted data from a CMS envelopedData or authEnvelopedData +message into a separate file. +""" + +import argparse +from pathlib import Path + +from asn1crypto.cms import ContentInfo, AuthEnvelopedData, EnvelopedData + +# Parse command-line arguments +# +parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, +) +parser.add_argument("-d", "--data", metavar="FILE", type=Path, + help="Write detached data (without envelope) to FILE") +parser.add_argument("-e", "--envelope", metavar="FILE", type=Path, + help="Write envelope (without data) to FILE") +parser.add_argument("-o", "--overwrite", action="store_true", + help="Overwrite output files") +parser.add_argument("file", type=Path, help="Input envelope file") +args = parser.parse_args() +if args.data is None and args.envelope is None: + parser.error("at least one of --data and --envelope is required") +outmode = "wb" if args.overwrite else "xb" + +# Read input envelope +# +envelope = ContentInfo.load(args.file.read_bytes()) + +# Locate encrypted content info +# +content = envelope["content"] +if type(content) is AuthEnvelopedData: + encinfo = content["auth_encrypted_content_info"] +elif type(content) is EnvelopedData: + encinfo = content["encrypted_content_info"] +else: + parser.error("Input file does not contain any encrypted data") + +# Detach encrypted content data +# +data = encinfo["encrypted_content"] +del encinfo["encrypted_content"] + +# Write envelope (without data), if applicable +# +if args.envelope: + with args.envelope.open(mode=outmode) as fh: + fh.write(envelope.dump()) + +# Write data (without envelope), if applicable +# +if args.data: + with args.data.open(mode=outmode) as fh: + fh.write(data.contents) diff --git a/contrib/rom-o-matic/README b/contrib/rom-o-matic/README deleted file mode 100644 index b68cf775e..000000000 --- a/contrib/rom-o-matic/README +++ /dev/null @@ -1,62 +0,0 @@ -ROM-o-matic web interface for building iPXE ROMs ------------------------------------------------- - -This web application generates iPXE images and sends them to a web -browser. - -Available as part of the iPXE source code distribution, which can be -downlaoded from http://etherboot.org/ - -Author: Marty Connor <mdc@etherboot.org> -License: GPLv2 -Support: http://etherboot.org/mailman/listinfo/ipxe - Please send support questions to the iPXE mailing list - -System Requirements -------------------- -- Apache web server -- PHP 4+ -- Tools required to build iPXE installed on the server - - gcc, mtools, syslinux, perl, etc. - -Setup ------ -As distributed, it is expected that the rom-o-matic source code -directory is in the contrib directory of a iPXE source distribution. - -The easiest way to do this is to simply put a iPXE source distribution -in a web server accessible directory. - -If this is not the case, you will need to either edit the file - - "globals.php" - -or create a file called - - "local-config.php" - -containing the following lines: - -<?php -$src_dir = "../../src"; -?> - -Then change the line beginning "$src_dir = " to the path of your iPXE -source code tree. - -To make build times shorter, before you run rom-o-matic for the first time -you should cd to the ipxe "src" directory and enter the following -commands: - - $ make - $ make bin/NIC - -This will pro-compile most object files and will make your rom-o-matic -builds much faster. - -Running rom-o-matic from a web browser --------------------------------------- -Enter a URL like: - - http://example.com/ipxe-1.x.x/contrib/rom-o-matic - diff --git a/contrib/rom-o-matic/bottom.php b/contrib/rom-o-matic/bottom.php deleted file mode 100644 index 9ba8e3190..000000000 --- a/contrib/rom-o-matic/bottom.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -?> -<hr> -<h4> -Resources: -</h4> -<ul> - <li> - Source code for iPXE images is available at - <a href="http://www.ipxe.org/download" target="_blank"> - http://www.ipxe.org/download</a> - <br><br> - </li> - <li> - For general information about using iPXE, please visit the - <a href="http://www.ipxe.org/" target="_blank"> - iPXE Project Home Page</a> - <br><br> - </li> - <li> - For Email-based support for iPXE please join - <a href="http://www.ipxe.org/contact" target="_blank"> - iPXE Project mailing lists.</a> - <br><br> - </li> - <li> - For real-time online iPXE support via IRC please visit the - <a href="irc://irc.freenode.net/%23ipxe"> #ipxe channel - of irc.freenode.net</a>. - <br><br> - </li> -</ul> -<hr> - <font size="-1"> - <br> - Please email <a href="mailto:<?php echo "${webmaster_email}" ?>"><?php echo "${webmaster_email}"?></a> - with questions or comments about this website. - </font> - <br><br> -<hr> -</body> -</html> diff --git a/contrib/rom-o-matic/build.php b/contrib/rom-o-matic/build.php deleted file mode 100644 index b2b5bb452..000000000 --- a/contrib/rom-o-matic/build.php +++ /dev/null @@ -1,311 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -// Get utility functions and set globals -require_once "utils.php"; - -// Make sure at least $A (action) was supplied -if ( ! isset ( $_POST['A'] ) ) { - - // Present user with form to customize build options - require_once "customize-flags.php"; - - exit (); - -// If user chose "Customize" option on form -} else if ( $_POST['A'] == "Customize" ) { - - // Present user with form to customize build options - require_once "customize-flags.php"; - - exit (); - -// The following conditional includes all other cases except "Get Image" -// particularly the explicit ($A == "Start Over") case -} else if ( $_POST['A'] != "Get Image" ) { - - // Note that this method of redirections discards all the - // configuration flags, which is intentional in this case. - - $dest = curDirURL (); - header ( "Location: $dest" ); - - // This next "echo" should normally not be seen, because - // the "header" statement above should cause immediate - // redirection but just in case... - - echo "Try this link: <a href=\"$dest\">$dest</a>"; - - exit (); -} - -// OK, we're going to try to use whatever options have been set -// to build an image. - -// Make sure at least $nic was supplied -if ( ! isset ( $_POST['nic'] ) ) { - die ( "No NIC supplied!" ); -} -if ( isset ( $nics[$_POST['nic']] ) ) { - $nic = $nics[$_POST['nic']]; -} else { - die ( "Invalid NIC \"${_POST['nic']}\" supplied!" ); -} - -// Fetch flags -$flags = get_flags (); - -// Get requested format -$ofmt = isset ( $_POST['ofmt'] ) ? $_POST['ofmt'] : ""; -$fmt_extension = isset ( $ofmts[$ofmt] ) ? $ofmts[$ofmt] : 'dsk'; - -// Handle some special cases - -$pci_vendor_code = ""; -$pci_device_code = ""; - -if ( $nic == 'undionly' && $fmt_extension == "pxe" ) { - - // undionly.pxe can't work because it unloads the PXE stack - // that it needs to communicate with, so we set the extension - // to .kpxe, which has a chance of working. The extension - // .kkpxe is another option. - - $fmt_extension = "kpxe"; - -} else if ( $fmt_extension == "rom" ) { - - if ( ! isset ( $_POST['pci_vendor_code'] ) - || ! isset ( $_POST['pci_device_code'] ) ) { - die ( "rom output format selected but PCI code(s) missing!" ); - } - - $pci_vendor_code = $_POST['pci_vendor_code']; - $pci_device_code = $_POST['pci_device_code']; - - if ( $pci_vendor_code == "" - || $pci_device_code == "" ) { - die ( "rom output format selected but PCI code(s) missing!" ); - } - - // Try to be forgiving of 0xAAAA format - if ( strtolower ( substr ( $pci_vendor_code, 0, 2 ) ) == "0x" - && strlen ( $pci_vendor_code ) == 6 ) { - $pci_vendor_code = substr ( $pci_vendor_code, 2, 4 ); - } - if ( strtolower ( substr ( $pci_device_code, 0, 2 ) ) == "0x" - && strlen ( $pci_device_code ) == 6 ) { - $pci_device_code = substr ( $pci_device_code, 2, 4 ); - } - - // concatenate the pci codes to get the $nic part of the - // Make target - $pci_codes = strtolower ( $pci_vendor_code . $pci_device_code ); - - $nic = $pci_codes; - if ( ! isset ( $roms[$pci_codes] ) ) { - die ( "Sorry, no network driver supports PCI codes<br>" - . "${_POST['pci_vendor_code']}:" - . "${_POST['pci_device_code']}" ); - } -} else if ( $fmt_extension != "rom" - && ( $pci_vendor_code != "" || $pci_device_code != "" ) ) { - die ( "'$fmt_extension' format was selected but PCI IDs were" - . " also entered.<br>Did you mean to select 'rom' output format" - . " instead?" ); -} - -/** - * remove temporary build directory - * - * @return bool true if removal is successful, false otherwise - */ -function rm_build_dir () -{ - global $build_dir; - global $keep_build_dir; - - if ( $keep_build_dir !== true ) { - rm_file_or_dir ( $build_dir ); - } -} - -// Arrange for the build directory to always be removed on exit. -$build_dir = ""; -$keep_build_dir = false; -register_shutdown_function ( 'rm_build_dir' ); - -// Make temporary copy of src directory -$build_dir = mktempcopy ( "$src_dir", "/tmp", "MDCROM" ); -$config_dir = $build_dir . "/config"; - -// Write config files with supplied flags -write_ipxe_config_files ( $config_dir, $flags ); - -// Handle a possible embedded script -$emb_script_cmd = ""; -$embedded_script = isset ( $_POST['embedded_script'] ) ? $_POST['embedded_script'] : ""; -if ( $embedded_script != "" ) { - $emb_script_path = "$build_dir" . "/script0.ipxe"; - - if ( substr ( $embedded_script, 0, 5 ) != "#!ipxe" ) { - $embedded_script = "#!ipxe\n" . $embedded_script; - } - - // iPXE 0.9.7 doesn't like '\r\n" in the shebang... - $embedded_script = str_replace ( "\r\n", "\n", $embedded_script ); - - write_file_from_string ( $emb_script_path, $embedded_script ); - $emb_script_cmd = "EMBEDDED_IMAGE=${emb_script_path}"; -} - -// Make the requested image. $status is set to 0 on success -$make_target = "bin/${nic}.${fmt_extension}"; -$gitversion = exec('git describe --always --abbrev=1 --match "" 2>/dev/null'); -if ($gitversion) { - $gitversion = "GITVERSION=$gitversion"; -} - -$make_cmd = "make -C '$build_dir' '$make_target' $gitversion $emb_script_cmd 2>&1"; - -exec ( $make_cmd, $maketxt, $status ); - -// Uncomment the following section for debugging - -/** - -echo "<h2>build.php:</h2>"; -echo "<h3>Begin debugging output</h3>"; - -//echo "<h3>\$_POST variables</h3>"; -//echo "<pre>"; var_dump ( $_POST ); echo "</pre>"; - -echo "<h3>Build options:</h3>"; -echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; -echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; -echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; -echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; -echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; - -echo "<h3>Flags:</h3>"; -show_flags ( $flags ); - -if ( $embedded_script != "" ) { - echo "<h3>Embedded script:</h3>"; - echo "<blockquote>"."<pre>"; - echo $embedded_script; - echo "</pre>"."</blockquote>"; -} - -echo "<h3>Make output:</h3>"; -echo "Make command: " . $make_cmd . "<br>"; -echo "Build status = <? echo $status ?>" . "<br>"; -echo "<blockquote>"."<pre>"; -echo htmlentities ( implode ("\n", $maketxt ) ); -echo "</pre>"."</blockquote>"; -// Uncomment the next line if you want to keep the -// build directory around for inspection after building. -$keep_build_dir = true; -die ( "<h3>End debugging output</h3>" ); - -**/ // End debugging section - -// Send ROM to browser (with extreme prejudice) - -if ( $status == 0 ) { - - $fp = fopen("${build_dir}/${make_target}", "rb" ); - if ( $fp > 0 ) { - - $len = filesize ( "${build_dir}/${make_target}" ); - if ( $len > 0 ) { - - $buf = fread ( $fp, $len ); - fclose ( $fp ); - - // Delete build directory as soon as it is not needed - rm_build_dir (); - - $output_filename = preg_replace('/[^a-z0-9\+\.\-]/i', '', "ipxe-${version}-${nic}.${fmt_extension}"); - - // Try to force IE to handle downloading right. - Header ( "Cache-control: private"); - Header ( "Content-Type: application/x-octet-stream; " . - "name=$output_filename"); - Header ( "Content-Disposition: attachment; " . - "Filename=$output_filename"); - Header ( "Content-Location: $output_filename"); - Header ( "Content-Length: $len"); - - echo $buf; - - exit (); - } - } -} - -/* - * If we reach this point, the build has failed, and we provide - * debugging information for a potential bug report - * - */ - -// Remove build directory -rm_build_dir (); - -// Announce failure if $status from make was non-zero -echo "<h2>Build failed. Status = " . $status . "</h2>"; -echo "<h2>build.php:</h2>"; -echo "<h3>Build options:</h3>"; -echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; -echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; -echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; -echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; -echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; - -echo "<h3>Flags:</h3>"; -show_flags ( $flags ); - -if ( $embedded_script != "" ) { - echo "<h3>Embedded script:</h3>"; - echo "<blockquote>"."<pre>"; - echo $embedded_script; - echo "</pre>"."</blockquote>"; -} - -echo "<h3>Make output:</h3>"; -echo "Make command: " . $make_cmd . "<br>"; -echo "<blockquote>"."<pre>"; -echo htmlentities ( implode ("\n", $maketxt ) ); -echo "</pre>"."</blockquote>"; - -echo "Please let us know that this happened, and paste the above output into your email message.<br>"; - -include_once $bottom_inc; - -// For emacs: -// Local variables: -// c-basic-offset: 4 -// c-indent-level: 4 -// tab-width: 4 -// End: - -?> diff --git a/contrib/rom-o-matic/customize-flags.php b/contrib/rom-o-matic/customize-flags.php deleted file mode 100644 index e283921a8..000000000 --- a/contrib/rom-o-matic/customize-flags.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -// Get utility functions and set globals -require_once "utils.php"; - -// Prepare settable compile options for presentation to user -$flags = default_flags (); - -$build = "<input type=\"submit\" name=\"A\" value=\"Get Image\">"; -$restart = "<input type=\"submit\" name=\"A\" value=\"Start Over\">"; - -// Begin html output -include_once $top_inc; - -?> - -<form action="build.php" method=POST> - <input type="hidden" name="version" value = "<?php echo $version ?>"> - <input type="hidden" name="use_flags" value="1"> - <h3> - Make changes below and press <?php echo $build ?> to create an image, <br> - Or press <?php echo $restart ?> to return to the main page. - </h3> - <hr> - <ul> - <?php require ( "directions.php" ); ?> - </ul> - <hr> - <?php echo_flags( $flags ); ?> - <hr> - <h3>Embedded Script:</h3> - <?php echo textarea ( "embedded_script", "", "10", "50" ); ?> - <br><br> - <hr> - <center><table width="35%"><tr> - <td align="left"> <?php echo $build; ?> </td> - <td align="right"> <?php echo $restart ?></td> - </tr></table></center> -</form> - -<?php include_once $bottom_inc; ?> -<? -// For emacs: -// -// Local variables: -// c-basic-offset: 4 -// c-indent-level: 4 -// tab-width: 4 -// End: -?> diff --git a/contrib/rom-o-matic/directions.php b/contrib/rom-o-matic/directions.php deleted file mode 100644 index 540121edd..000000000 --- a/contrib/rom-o-matic/directions.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -?> - <li> - Choose an output format: <?php echo keys_menubox ( "ofmt", $ofmts, - isset ( $_POST['ofmt'] ) ? $_POST['ofmt'] : "") ?> - <br><br> - </li> - <li> - Choose a NIC type: <?php echo keys_menubox ( "nic", $nics, - isset ( $_POST['nic'] ) ? $_POST['nic'] : "" ) ?> - <br><br> - </li> - <li> - <strong>( optional — for binary ROM image format only )</strong> <br><br> - If you choose <em>Binary ROM image</em> as your output format, you must<br> - enter <strong>4 hex digits</strong> below for - <em>PCI VENDOR CODE</em> and <em>PCI DEVICE CODE</em> <br> - that match the NIC device for which you are making this image.<br><br> - Information on how to determine NIC PCI IDs may be found - <a href="http://www.ipxe.org/howto/romburning" - target="_blank">here</a>. - <br><br> - PCI VENDOR CODE: <?php echo textbox ( "pci_vendor_code", - isset ( $_POST['pci_vendor_code'] ) ? $_POST['pci_vendor_code'] - : "", 6 ); ?> - - PCI DEVICE CODE: <?php echo textbox ( "pci_device_code", - isset ( $_POST['pci_device_code'] ) ? $_POST['pci_device_code'] - : "", 6 ); ?> - <h4>Please note for ROM images:</h4> - <ul> - <li> - If you enter PCI IDs, we will attempt to determine the correct<br> - driver to support them, and will ignore any NIC type entered - above.<br><br> - </li> - <li> - iPXE does not support all possible PCI IDs for supported - NICs. - <br><br> - </li> - </ul> - </li> diff --git a/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html b/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html deleted file mode 100644 index 444c5e602..000000000 --- a/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Automatic booting diff --git a/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html b/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html deleted file mode 100644 index e135897f1..000000000 --- a/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html +++ /dev/null @@ -1 +0,0 @@ -Tenths of a second for which the shell banner should appear diff --git a/contrib/rom-o-matic/doc/COMCONSOLE.html b/contrib/rom-o-matic/doc/COMCONSOLE.html deleted file mode 100644 index e7036c00e..000000000 --- a/contrib/rom-o-matic/doc/COMCONSOLE.html +++ /dev/null @@ -1,3 +0,0 @@ -Serial Console I/O port address. Common addresses are:<br> -COM1 => 0x3f8, COM2 => 0x2f8, COM3 => 0x3e8, COM4 => 0x2e8 - diff --git a/contrib/rom-o-matic/doc/COMDATA.html b/contrib/rom-o-matic/doc/COMDATA.html deleted file mode 100644 index a27e27510..000000000 --- a/contrib/rom-o-matic/doc/COMDATA.html +++ /dev/null @@ -1 +0,0 @@ -Serial Console Data bits diff --git a/contrib/rom-o-matic/doc/COMPARITY.html b/contrib/rom-o-matic/doc/COMPARITY.html deleted file mode 100644 index 14f359517..000000000 --- a/contrib/rom-o-matic/doc/COMPARITY.html +++ /dev/null @@ -1 +0,0 @@ -Serial Console Parity: 0=None, 1=Odd, 2=Even diff --git a/contrib/rom-o-matic/doc/COMPRESERVE.html b/contrib/rom-o-matic/doc/COMPRESERVE.html deleted file mode 100644 index 6e41a10b3..000000000 --- a/contrib/rom-o-matic/doc/COMPRESERVE.html +++ /dev/null @@ -1 +0,0 @@ -Keep settings from a previous user of the serial port
\ No newline at end of file diff --git a/contrib/rom-o-matic/doc/COMSPEED.html b/contrib/rom-o-matic/doc/COMSPEED.html deleted file mode 100644 index 32b685957..000000000 --- a/contrib/rom-o-matic/doc/COMSPEED.html +++ /dev/null @@ -1 +0,0 @@ -Serial Console Baud rate diff --git a/contrib/rom-o-matic/doc/COMSTOP.html b/contrib/rom-o-matic/doc/COMSTOP.html deleted file mode 100644 index ae3fd24fb..000000000 --- a/contrib/rom-o-matic/doc/COMSTOP.html +++ /dev/null @@ -1 +0,0 @@ -Serial Console Stop bits diff --git a/contrib/rom-o-matic/doc/CONFIG_CMD.html b/contrib/rom-o-matic/doc/CONFIG_CMD.html deleted file mode 100644 index 1256c0694..000000000 --- a/contrib/rom-o-matic/doc/CONFIG_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Option configuration console diff --git a/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html b/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html deleted file mode 100644 index 144eea3b9..000000000 --- a/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html +++ /dev/null @@ -1 +0,0 @@ -Enable Default BIOS console diff --git a/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html b/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html deleted file mode 100644 index f35e2ff5a..000000000 --- a/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html +++ /dev/null @@ -1 +0,0 @@ -Enable Serial port console diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html deleted file mode 100644 index 26fdf8a85..000000000 --- a/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html +++ /dev/null @@ -1 +0,0 @@ -Wireless WEP encryption support diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html deleted file mode 100644 index b218a1e91..000000000 --- a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html +++ /dev/null @@ -1 +0,0 @@ -Wireless WPA encryption support diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html deleted file mode 100644 index 947597d13..000000000 --- a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html +++ /dev/null @@ -1 +0,0 @@ -Wireless WPA2 encryption support diff --git a/contrib/rom-o-matic/doc/DHCP_CMD.html b/contrib/rom-o-matic/doc/DHCP_CMD.html deleted file mode 100644 index a0c31c7c0..000000000 --- a/contrib/rom-o-matic/doc/DHCP_CMD.html +++ /dev/null @@ -1 +0,0 @@ -DHCP management commands diff --git a/contrib/rom-o-matic/doc/DNS_RESOLVER.html b/contrib/rom-o-matic/doc/DNS_RESOLVER.html deleted file mode 100644 index 1029b9c52..000000000 --- a/contrib/rom-o-matic/doc/DNS_RESOLVER.html +++ /dev/null @@ -1 +0,0 @@ -DNS resolver diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html deleted file mode 100644 index 7686d5d8a..000000000 --- a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html +++ /dev/null @@ -1 +0,0 @@ -File Transfer Protocol diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html deleted file mode 100644 index c28d88868..000000000 --- a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html +++ /dev/null @@ -1 +0,0 @@ -Hypertext Transfer Protocol diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html deleted file mode 100644 index f2b31b17a..000000000 --- a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html +++ /dev/null @@ -1 +0,0 @@ -Trivial File Transfer Protocol diff --git a/contrib/rom-o-matic/doc/IFMGMT_CMD.html b/contrib/rom-o-matic/doc/IFMGMT_CMD.html deleted file mode 100644 index 0e2b2a5e8..000000000 --- a/contrib/rom-o-matic/doc/IFMGMT_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Interface management commands diff --git a/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html b/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html deleted file mode 100644 index d85e5d079..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html +++ /dev/null @@ -1 +0,0 @@ -Linux bzImage image support diff --git a/contrib/rom-o-matic/doc/IMAGE_CMD.html b/contrib/rom-o-matic/doc/IMAGE_CMD.html deleted file mode 100644 index 6f5acb538..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Image management commands diff --git a/contrib/rom-o-matic/doc/IMAGE_ELF.html b/contrib/rom-o-matic/doc/IMAGE_ELF.html deleted file mode 100644 index 5e39e8bd4..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_ELF.html +++ /dev/null @@ -1 +0,0 @@ -ELF image support diff --git a/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html b/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html deleted file mode 100644 index 6a092a203..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html +++ /dev/null @@ -1 +0,0 @@ -MultiBoot image support diff --git a/contrib/rom-o-matic/doc/IMAGE_NBI.html b/contrib/rom-o-matic/doc/IMAGE_NBI.html deleted file mode 100644 index eb78e03c3..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_NBI.html +++ /dev/null @@ -1 +0,0 @@ -NBI image support diff --git a/contrib/rom-o-matic/doc/IMAGE_PXE.html b/contrib/rom-o-matic/doc/IMAGE_PXE.html deleted file mode 100644 index bdca3841d..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_PXE.html +++ /dev/null @@ -1 +0,0 @@ -PXE image support diff --git a/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html b/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html deleted file mode 100644 index 87416727f..000000000 --- a/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html +++ /dev/null @@ -1 +0,0 @@ -iPXE script image support diff --git a/contrib/rom-o-matic/doc/IWMGMT_CMD.html b/contrib/rom-o-matic/doc/IWMGMT_CMD.html deleted file mode 100644 index 0d5bd4a6f..000000000 --- a/contrib/rom-o-matic/doc/IWMGMT_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Wireless interface management commands diff --git a/contrib/rom-o-matic/doc/NMB_RESOLVER.html b/contrib/rom-o-matic/doc/NMB_RESOLVER.html deleted file mode 100644 index a0bdc17d3..000000000 --- a/contrib/rom-o-matic/doc/NMB_RESOLVER.html +++ /dev/null @@ -1 +0,0 @@ -NMB resolver diff --git a/contrib/rom-o-matic/doc/NVO_CMD.html b/contrib/rom-o-matic/doc/NVO_CMD.html deleted file mode 100644 index 5346f3f57..000000000 --- a/contrib/rom-o-matic/doc/NVO_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Non-volatile option storage commands diff --git a/contrib/rom-o-matic/doc/ROUTE_CMD.html b/contrib/rom-o-matic/doc/ROUTE_CMD.html deleted file mode 100644 index 8114c265b..000000000 --- a/contrib/rom-o-matic/doc/ROUTE_CMD.html +++ /dev/null @@ -1 +0,0 @@ -Routing table management commands diff --git a/contrib/rom-o-matic/doc/SANBOOT_CMD.html b/contrib/rom-o-matic/doc/SANBOOT_CMD.html deleted file mode 100644 index 2e9d84075..000000000 --- a/contrib/rom-o-matic/doc/SANBOOT_CMD.html +++ /dev/null @@ -1 +0,0 @@ -SAN boot commands diff --git a/contrib/rom-o-matic/flag-table.php b/contrib/rom-o-matic/flag-table.php deleted file mode 100644 index fe81c8029..000000000 --- a/contrib/rom-o-matic/flag-table.php +++ /dev/null @@ -1,531 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -$ofmts = array - ( "Floppy bootable image (.dsk)" => "dsk", - "SYSLINUX-based bootable floppy image (.sdsk)" => "sdsk", - "ISO bootable image (.iso)" => "iso", - "ISO bootable image with legacy floppy emulation (.liso)" => "liso", - "Linux kernel (SYSLINUX/GRUB/LILO) loadable image (.lkrn)" => "lkrn", - "USB Keychain disk image (.usb)" => "usb", - "ROM binary (flashable) image (.rom)" => "rom", - "ROM binary (flashable) for problem PMM BIOSES (.hrom)" => "hrom", - "PXE bootstrap loader image [Unload PXE stack] (.pxe)" => "pxe", - "PXE bootstrap loader keep [Keep PXE stack method 1] (.kpxe)" => "kpxe", - "PXE bootstrap loader keep [Keep PXE stack method 2] (.kkpxe)" => "kkpxe", - ); - -$flag_table = array ( - - // Begin General Options: - - "HDR_MISC_OPTIONS" - => array ( - "flag" => "HDR_MISC_OPTIONS", - "hide_from_user" => "yes", // Hide even the header - "type" => "header", - "label" => "Miscellaneous Options" - ), - - "PRODUCT_NAME" - => array ( - "flag" => "PRODUCT_NAME", - "hide_from_user" => "yes", - "type" => "string", - "value" => "", - "cfgsec" => "general" - ), - - "PRODUCT_SHORT_NAME" - => array ( - "flag" => "PRODUCT_SHORT_NAME", - "hide_from_user" => "yes", - "type" => "string", - "value" => "iPXE", - "cfgsec" => "general" - ), - - // End General Options: - - // Begin Console Options: - - "HDR_CONSOLE_OPTIONS" - => array ( - "flag" => "HDR_CONSOLE_OPTIONS", - "type" => "header", - "label" => "Console Options" - ), - - "CONSOLE_PCBIOS" - => array ( - "flag" => "CONSOLE_PCBIOS", - "type" => "on/off", - "value" => "on", - "cfgsec" => "console" - ), - - "CONSOLE_SERIAL" - => array ( - "flag" => "CONSOLE_SERIAL", - "type" => "on/off", - "value" => "off", - "cfgsec" => "console" - ), - - "BANNER_TIMEOUT" - => array ( - "flag" => "BANNER_TIMEOUT", - "type" => "integer", - "value" => "20", - "cfgsec" => "general" - ), - - "KEYBOARD_MAP" - => array ( - "flag" => "KEYBOARD_MAP", - "type" => "choice", - "options" => array("al","az","bg","by","cf","cz","de","dk","es","et","fi","fr", - "gr","hu","il","it","lt","mk","mt","nl","no","pl","pt","ro","ru","sg","sr", - "th","ua","uk","us","wo"), - "value" => "us", - "cfgsec" => "console" - ), - - "LOG_LEVEL" - => array ( - "flag" => "LOG_LEVEL", - "type" => "choice", - "options" => array("LOG_NONE","LOG_EMERG","LOG_ALERT","LOG_CRIT","LOG_ERR", - "LOG_WARNING","LOG_NOTICE","LOG_INFO","LOG_DEBUG","LOG_ALL"), - "value" => "LOG_NONE", - "cfgsec" => "console" - ), - - // End Console Options - - // Begin Network Protocol Options: - - "HDR_NETWORK_PROTOCOL_OPTIONS" - => array ( - "flag" => "HDR_NETWORK_PROTOCOL_OPTIONS", - "hide_from_user" => "yes", // Hide even the header - "type" => "header", - "label" => "Network Protocol Options" - ), - - "NET_PROTO_IPV4" - => array ( - "flag" => "NET_PROTO_IPV4", - "type" => "on/off", - "value" => "on", - "hide_from_user" => "yes", - "cfgsec" => "general" - ), - - // End Network Protocol Options - - // Begin Serial Port configuration - - "HDR_SERIAL_PORT_OPTIONS" - => array ( - "flag" => "HDR_SERIAL_PORT_OPTIONS", - "type" => "header", - "label" => "Serial Port Options" - ), - - "COMCONSOLE" - => array ( - "flag" => "COMCONSOLE", - "type" => "integer-hex", // e.g. 0x378 - "value" => "0x3F8", - "cfgsec" => "serial" - ), - - "COMPRESERVE" - => array ( - "flag" => "COMPRESERVE", - "type" => "on/off", - "value" => "off", - "cfgsec" => "serial" - ), - - "COMSPEED" - => array ( - "flag" => "COMSPEED", - "type" => "integer", - "value" => "115200", - "cfgsec" => "serial" - ), - - "COMDATA" - => array ( - "flag" => "COMDATA", - "type" => "integer", - "value" => "8", - "cfgsec" => "serial" - ), - - "COMPARITY" - => array ( - "flag" => "COMPARITY", - "type" => "integer", - "value" => "0", - "cfgsec" => "serial" - ), - - "COMSTOP" - => array ( - "flag" => "COMSTOP", - "type" => "integer", - "value" => "1", - "cfgsec" => "serial" - ), - - // End Serial Options - - // Begin Download Protocols - - "HDR_DOWNLOAD_PROTOCOLS" - => array ( - "flag" => "HDR_DOWNLOAD_PROTOCOLS", - "type" => "header", - "label" => "Download Protocols" - ), - - "DOWNLOAD_PROTO_TFTP" - => array ( - "flag" => "DOWNLOAD_PROTO_TFTP", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "DOWNLOAD_PROTO_HTTP" - => array ( - "flag" => "DOWNLOAD_PROTO_HTTP", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "DOWNLOAD_PROTO_HTTPS" - => array ( - "flag" => "DOWNLOAD_PROTO_HTTPS", - "type" => "on/off", - "value" => "off", - "cfgsec" => "general" - ), - - "DOWNLOAD_PROTO_FTP" - => array ( - "flag" => "DOWNLOAD_PROTO_FTP", - "type" => "on/off", - "value" => "off", - "cfgsec" => "general" - ), - - // End Download Protocols - - // Begin SAN boot protocols - - "HDR_SANBOOT_PROTOCOLS" - => array ( - "flag" => "HDR_SANBOOT_PROTOCOLS", - "type" => "header", - "label" => "SAN Boot Protocols" - ), - - "SANBOOT_PROTO_ISCSI" - => array ( - "flag" => "SANBOOT_PROTO_ISCSI", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "SANBOOT_PROTO_AOE" - => array ( - "flag" => "SANBOOT_PROTO_AOE", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - // End SAN boot protocols - - // Begin Name resolution modules - - "HDR_NAME_RESOLUTION_MODULES" - => array ( - "flag" => "HDR_NAME_RESOLUTION_MODULES", - "type" => "header", - "label" => "Name Resolution Modules" - ), - - "DNS_RESOLVER" - => array ( - "flag" => "DNS_RESOLVER", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "NMB_RESOLVER" - => array ( - "flag" => "NMB_RESOLVER", - "type" => "on/off", - "value" => "off", - "hide_from_user" => "yes", - "cfgsec" => "general" - ), - - // End Name resolution modules - - // Begin Image types - - "HDR_IMAGE_TYPES" - => array ( - "flag" => "HDR_IMAGE_TYPES", - "type" => "header", - "label" => "Image Types", - ), - - "IMAGE_ELF" - => array ( - "flag" => "IMAGE_ELF", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_NBI" - => array ( - "flag" => "IMAGE_NBI", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_MULTIBOOT" - => array ( - "flag" => "IMAGE_MULTIBOOT", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_PXE" - => array ( - "flag" => "IMAGE_PXE", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_SCRIPT" - => array ( - "flag" => "IMAGE_SCRIPT", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_BZIMAGE" - => array ( - "flag" => "IMAGE_BZIMAGE", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_COMBOOT" - => array ( - "flag" => "IMAGE_COMBOOT", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - // End Image types - - // Begin Command-line commands to include - - "HDR_COMMAND_LINE_OPTIONS" - => array ( - "flag" => "HDR_COMMAND_LINE_OPTIONS", - "type" => "header", - "label" => "Command Line Options", - ), - - "AUTOBOOT_CMD" - => array ( - "flag" => "AUTOBOOT_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "NVO_CMD" - => array ( - "flag" => "NVO_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "CONFIG_CMD" - => array ( - "flag" => "CONFIG_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IFMGMT_CMD" - => array ( - "flag" => "IFMGMT_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IWMGMT_CMD" - => array ( - "flag" => "IWMGMT_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "ROUTE_CMD" - => array ( - "flag" => "ROUTE_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "IMAGE_CMD" - => array ( - "flag" => "IMAGE_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "DHCP_CMD" - => array ( - "flag" => "DHCP_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "SANBOOT_CMD" - => array ( - "flag" => "SANBOOT_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "LOGIN_CMD" - => array ( - "flag" => "LOGIN_CMD", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "TIME_CMD" - => array ( - "flag" => "TIME_CMD", - "type" => "on/off", - "value" => "off", - "cfgsec" => "general" - ), - - "DIGEST_CMD" - => array ( - "flag" => "DIGEST_CMD", - "type" => "on/off", - "value" => "off", - "cfgsec" => "general" - ), - - // End Command-line commands to include - - // Begin Wireless options - - "HDR_WIRELESS_OPTIONS" - => array ( - "flag" => "HDR_WIRELESS_OPTIONS", - "type" => "header", - "label" => "Wireless Interface Options", - ), - - "CRYPTO_80211_WEP" - => array ( - "flag" => "CRYPTO_80211_WEP", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "CRYPTO_80211_WPA" - => array ( - "flag" => "CRYPTO_80211_WPA", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - "CRYPTO_80211_WPA2" - => array ( - "flag" => "CRYPTO_80211_WPA2", - "type" => "on/off", - "value" => "on", - "cfgsec" => "general" - ), - - // End Wireless options - - // Obscure options required to compile - "NETDEV_DISCARD_RATE" - => array ( - "flag" => "NETDEV_DISCARD_RATE", - "type" => "integer", - "value" => "0", - "cfgsec" => "general", - "hide_from_user" => true - ) - - // End Obscure options -); - -// For emacs: -// Local variables: -// c-basic-offset: 4 -// c-indent-level: 4 -// tab-width: 4 -// End: - -?> diff --git a/contrib/rom-o-matic/globals.php b/contrib/rom-o-matic/globals.php deleted file mode 100644 index 822e4bc0b..000000000 --- a/contrib/rom-o-matic/globals.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -// Directory containing iPXE source code tree -$src_dir = "../../src"; - -// Compute iPXE version based on source tree -exec ( "make -C '$src_dir' version 2>&1", $make_output, $status ); -$version = ( $status == 0 && count ( $make_output ) > 1 ) - ? trim ( $make_output[count ( $make_output ) - 2] ) - : ""; - -// Email address of person responsible for this website -$webmaster_email = "webmaster@example.com"; - -// Files that header and footer text -$top_inc = "top.php"; -$bottom_inc = "bottom.php"; - -// Descriptive strings -$header_title = "ROM-o-matic for iPXE $version"; -$html_tagline = "ROM-o-matic dynamically generates iPXE images"; -$html_title = "ROM-o-matic for iPXE $version"; -$description = "a dynamic iPXE image generator"; - -// For emacs: -// Local variables: -// c-basic-offset: 4 -// c-indent-level: 4 -// tab-width: 4 -// End: - -?> diff --git a/contrib/rom-o-matic/index.php b/contrib/rom-o-matic/index.php deleted file mode 100644 index 26585c975..000000000 --- a/contrib/rom-o-matic/index.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -// Get utility functions and set globals -require_once "utils.php"; - -// Begin html output -include_once $top_inc; - -?> -<form action="build.php" method=POST> - <input type="hidden" name="version" value = "<?php echo $version ?>"> - <h3>To create an image:</h3> - <ol> - <?php require ( "directions.php" ); ?> - <li> - Generate and download an image: - <input type="submit" name="A" value="Get Image"> - <br><br> - </li> - <li> - (optional) Customize image configuration options: - <input type="submit" name="A" value="Customize"> - <br><br> - </li> - </ol> -</form> - -<?php include_once $bottom_inc ?> diff --git a/contrib/rom-o-matic/top.php b/contrib/rom-o-matic/top.php deleted file mode 100644 index 42a8e2d27..000000000 --- a/contrib/rom-o-matic/top.php +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<?php - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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. - */ - -?> - -<html> -<head> - <link rev="made" href="mailto:<?php echo "${webmaster_email}" ?>"> - <meta name="keywords" content="rom, etherboot, ipxe, open source, rom-o-matic.net"> - <title><?php echo $header_title ?></title> - <meta name="description" content="<?php echo $description ?>"> -</head> -<h1> -<?php echo "$html_title" ?> -</h1> -<hr> -<h2> -<?php echo "$html_tagline" ?> -</h2> -</form> -<hr> diff --git a/contrib/rom-o-matic/utils.php b/contrib/rom-o-matic/utils.php deleted file mode 100644 index e0e62f447..000000000 --- a/contrib/rom-o-matic/utils.php +++ /dev/null @@ -1,684 +0,0 @@ -<?php // -*- Mode: PHP; -*- - -/** - * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. - * Copyright (C) 2009 Entity Cyber, Inc. - * - * 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 table of user-configurable iPXE options -require_once "flag-table.php"; - -// Include user-shadowable globals -require_once "globals.php"; - -// Allow user to shadow globals -if ( is_file ( 'local-config.php' ) ) { - include_once "local-config.php"; -} - -//// -// General utility functions -//// - -/** - * Remove undesirable characters from a given string - * - * Certain characters have the potential to be used for - * malicious purposes by web-based attackers. This routine - * filters out such characters. - * - * @param string $s supplied string - * - * @return string returned string with unwanted characters - * removed - */ -function cleanstring ( $s ) -{ - $len = strlen ( $s ); - if ( $len > 80 ) { - $s = substr ( $s, 0, 80 ); - } - - $s = trim ( $s ); - $pos = 0; - $result = ""; - - while ( $pos < $len ) { - $ltr = ord ( ucfirst ( $s[$pos] ) ); - if ( ( $ltr >= ord ( "A" ) ) && ( $ltr <= ord ( "Z" ) ) || - ( $ltr >= ord ( "0" ) ) && ( $ltr <= ord ( "9" ) ) || - ( $ltr == ord ( "." ) ) && ( strlen ( $result ) > 0 ) || - ( $ltr == ord ( "_" ) ) || - ( $ltr == ord ( "+" ) ) || - ( $ltr == ord ( ":" ) ) || - ( $ltr == ord ( "/" ) ) || - ( $ltr == ord ( "-" ) ) ) { - $result .= $s[$pos]; - } - $pos++; - } - return $result; -} - -/** - * Return URL of the currently running script, minus the filename - * - * @return string the URL of the currently running script, minus the filename - */ -function curDirURL () -{ - $dir = dirname ( $_SERVER['PHP_SELF'] ); - - if ( $dir == "." || $dir == "/" ) { - $dir = ""; - } - - $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" ); - $port = ( isset($_SERVER["SERVER_PORT"] ) && - ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || - ( $isHTTPS && $_SERVER["SERVER_PORT"] != "443" ) ) ); - - $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : ''; - - $dest = ( $isHTTPS ? 'https://' : 'http://' ) . - $_SERVER["SERVER_NAME"] . $dir . "/"; - - return $dest; -} - -/** - * Extract NIC families and associated ROM PCI IDs from the src/bin/NIC file. - * - * $src_dir must contain the path of the iPXE src directory for this build - * - * @return array[0] array $new_nics - * @return array[1] array $roms - */ -function parse_nic_file () -{ - global $src_dir; - - $fd = fopen ( "$src_dir/bin/NIC", "r" ); - if ( ! $fd ) { - die ( "Missing src/bin/NIC file. 'make bin/NIC'" ); - } - - $nics = array (); - $roms = array (); - $nic = ""; - - while ( !feof ( $fd ) ) { - - $line = trim ( fgets ( $fd, 200 ) ); - - $first_eight_chars = substr ( $line, 0, 8 ); - settype ( $first_eight_chars, "string" ); - - if ( strpos ( $first_eight_chars, "family" ) === 0 ) { - - // get pathname of NIC driver - #list ( $dummy, $nic ) = split( "[ \t]+", $line ); - list ( $dummy, $nic ) = explode("\t", $line); - settype ( $nic, "string" ); - - // extract filename name of driver from pathname - $nic = substr ( $nic, strrpos ( $nic, "/" ) + 1, - strlen ( $nic ) - strrpos ( $nic, "/" ) + 1 ); - - $nics[$nic] = $nic; - - // For each ISA NIC, there can only be one ROM variant - $roms[$nic] = $nic; - } - - // If the first 8 digits of the line are hex digits - // add this rom to the current nic family. - - if ( ( strlen ( $first_eight_chars ) == 8 ) - && ( ctype_xdigit ( $first_eight_chars ) ) - && ( $nic != "" ) ) { - - $roms[$first_eight_chars] = $nic; - } - } - fclose ( $fd ); - - // put most NICs in nice alpha order for menu - ksort ( $nics ); - - // add special cases to the top - - $new_nics = array ( "all-drivers" => "ipxe", - "undionly" => "undionly", - "undi" => "undi", - ); - - foreach ( $nics as $key => $value ) { - // skip the undi driver - if ( $key != "undi" ) { - $new_nics[$key] = $value; - } - } - - return array ( $new_nics, $roms ); -} - -//// -// HTML form utility functions -//// - -/** - * Return html code to create hidden form input fields - * - * @param string $flag name of form variable to set - * @param string $value value to give form variable - * - * @return string html code for given hidden form input field - */ -function hidden ( $flag, $value ) -{ - $value = htmlentities ( $value ); - return "<input type=\"hidden\" value=\"$value\" name=\"$flag\"></input>"; -} - -/** - * Return html code to create checkbox form input fields - * - * @param string $flag name of form variable to set - * @param string $value "on" means box should be checked - * - * @return string html code for given hidden form input field - */ -function checkbox ( $flag, $value ) -{ - return "<input type=\"checkbox\" value=\"on\" name=\"$flag\"" . - ($value == "on" ? " checked>" : ">" ); -} - -/** - * Return html code to create text form input fields - * - * @param string $flag name of form variable to set - * @param string $value initial contents of field - * @param string $size size in characters of text box - * - * @return string html code for given text input field - */ -function textbox ( $flag, $value, $size ) -{ - $value = htmlentities ( $value ); - return "<input type=\"text\" size=\"$size\" value=\"$value\" name=\"$flag\">"; -} - -/** - * Return html code to create textarea form fields - * - * @param string $flag name of form variable to set - * @param string $value initial contents of textarea - * @param string $rows height of text area in rows - * @param string $cols width of text area in columns - * - * @return string html code for given textarea input field - */ -function textarea ( $flag, $value, $rows, $cols ) -{ - $value = htmlentities ( $value ); - return "<textarea name=\"$flag\" rows=\"$rows\" cols=\"$cols\">" - . $value . "</textarea>"; -} - -/** - * Return html code to create select (menu) form fields - * - * Use array of strings as menu choices - * - * @param string $flag name of form variable to set - * @param array $options array of strings representing choices - * @param string $value value of choice to select in menu - * - * @return string html code for given select (menu) input field - */ -function menubox ( $name, $options, $value ) -{ - $s="<select name=\"$name\">"; - - foreach ( $options as $ignore => $option ) { - if ( !$value ) $value = $option; - $s .= "<option" . ( $option == $value ? " selected>" : ">" ) . - htmlentities ( $option ) . "</option>"; - } - return $s . "</select>"; -} - -/** - * Return html code to create select (menu) form fields - * - * Use indices of array of strings as menu choices rather than - * the values pointed to by the indicies. - * - * @param string $flag name of form variable to set - * @param array $options array of strings representing choices - * @param string $value value of choice to select in menu - * - * @return string html code for given select (menu) input field - */ -function keys_menubox ( $name, $options, $value ) -{ - $s="<select name=\"$name\">"; - - foreach ( $options as $option => $ignore ) { - if ( !$value ) $value = $option; - $s .= "<option" . ( $option == $value ? " selected>" : ">" ) . - htmlentities ( $option ) . "</option>"; - } - return $s . "</select>"; -} - -//// -// Flag (compile option) handling functions -//// - -/** - * Return default compile options (flags) - * - * Initial compile options are in a global called $flag_table. - * Create and return an array containing the ones we want. - * - * @return array default compile options (flags) - */ -function default_flags () -{ - global $flag_table; - - $flags = array (); - - foreach ( $flag_table as $key => $props ) { - - $flag = $props["flag"]; - $type = $props["type"]; - - // Fields like headers have no "value" property - if ( isset ( $props["value"] ) ) { - $flags[$flag] = $props["value"]; - } - } - return $flags; -} - -/** - * Return combination of default and user compile options (flags) - * - * Initial compile options are in a global called $flag_table. - * Compile options may have been changed via form input. We return - * an array with either the default value of each option or a user - * supplied value from form input. - * - * @return array combined default and user supplied compile options (flags) - */ -function get_flags () -{ - global $flag_table; - - $flags = default_flags (); - - if ( ! isset ( $_POST["use_flags"] ) ) - return $flags; - - foreach ( $flag_table as $key => $props ) { - - $flag = $props["flag"]; - $type = $props["type"]; - - if ( isset ( $_POST["$flag"] ) ) { - $flags[$flag] = $_POST["$flag"]; - if ( $type == "integer-hex" ) { - if ( strtolower ( substr ( $flags[$flag], 0, 2 ) ) != "0x" ) { - $flags[$flag] = "0x" . $flags[$flag]; - } - } - } else if ( $type == "on/off" ) { - // Unchecked checkboxes don't pass any POST value - // so we must check for them specially. At this - // point we know that there is no $_POST value set - // for this option. If it is a checkbox, this means - // it is unchecked, so record that in $flags so we - // can later generate an #undef for this option. - $flags[$flag] = "off"; - } - } - return $flags; -} - -/** - * Output given value in appropriate format for iPXE config file - * - * iPXE config/*.h files use C pre-processor syntax. Output the given - * compile option in a format appropriate to its type - * - * @param string $key index into $flag_table for given compile option - * @param string $value value we wish to set compile option to - * - * @return string code to set compile option to given value - */ -function pprint_flag ( $key, $value ) -{ - global $flag_table; - - // Determine type of given compile option (flag) - $type = $flag_table[$key]["type"]; - $s = ""; - - if ( $type == "on/off" && $value == "on" ) { - $s = "#define $key"; - } else if ( $type == "on/off" && $value != "on" ) { - $s = "#undef $key"; - } else if ( $type == "string" ) { - $s = ( "#define $key \"" . cleanstring ( $value ) . "\"" ); - } else if ($type == "qstring" ) { - $s = ( "#define $key \\\"" . cleanstring ( $value ) . "\\\"" ); - } else { - $s = "#define $key " . cleanstring ( $value ); - } - - return $s; -} - -/** - * Output html code to display all compile options as a table - * - * @param array $flags array of compile options - * - * @return void - */ -function echo_flags ( $flags ) -{ - global $flag_table; - - echo "<table>\n"; - - foreach ( $flag_table as $key => $props ) { - - // Hide parameters from users that should not be changed. - $hide_from_user = isset ( $props["hide_from_user"] ) ? $props["hide_from_user"] : "no"; - - $flag = $props["flag"]; - $type = $props["type"]; - - $value = isset ( $flags[$flag] ) ? $flags[$flag] : ''; - - if ( $hide_from_user == "yes" ) { - - // Hidden flags cannot not be set by the user. We use hidden form - // fields to keep them at their default values. - if ( $type != "header" ) { - echo hidden ( $flag, $value ); - } - - } else { - - // Flag (iPXE compile option) should be displayed to user - - if ( $type == "header" ) { - - $label = $props["label"]; - echo "<td colspan=2><hr><h3>$label</h3><hr></td>"; - - } else if ($type == "on/off" ) { - - echo "<td>", checkbox ( $flag, $value ), "</td><td><strong>$flag</strong></td>"; - - } else { // don't display checkbox for non-on/off flags - - echo "<td> </td><td><strong>$flag: </strong>"; - - if ($type == "choice" ) { - $options = $props["options"]; - echo menubox($flag, $options, $value); - - } else { - - echo textbox($flag, $value, ($type == "integer" || - $type == "integer-hex" - ? 7 : 25)); - } - echo "</td>"; - } - echo "</tr>\n"; - - if ( $type != "header" ) { - echo "<tr><td> </td>"; - echo "<td>\n"; - if ( is_file ( "doc/$flag.html" ) ) { - include_once "doc/$flag.html"; - } - echo "\n</td></tr>\n"; - } - } - } - echo "</table>"; -} - -/** - * Return an array of configuration sections used in all compile options - * - * $flag_table, the global list of compile options contains a 'cfgsec' - * property for each flag we are interested in. We return a list of - * all the unique cfgsec options we find in $flag_table. - * - * @return array an array of strings representing all unique cfgsec values - * found in $flag_table - */ -function get_flag_cfgsecs () -{ - global $flag_table; - $cfgsecs = array (); - - foreach ( $flag_table as $key => $props ) { - if ( isset ( $props['cfgsec'] ) ) { - $cfgsec = $props["cfgsec"]; - $cfgsecs[$cfgsec] = $cfgsec; - } - } - return $cfgsecs; -} - -//// -// File and directory handling functions -//// - -/** - * Create a copy of a given source directory to a given destination - * - * Since we are going to modify the source directory, we create a copy - * of the directory with a unique name in the given destination directory. - * We supply a prefix for the tempnam call to prepend to the random filename - * it generates. - * - * @param string $src source directory - * @param string $dst destination directory - * @param string $prefix string to append to directory created - * - * @return string absolute path to destination directory - */ -function mktempcopy ( $src, $dst, $prefix ) -{ - if ( $src[0] != "/" ) { - $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src; - } - - // Create a file in the given destination directory with a unique name - $dir = tempnam ( $dst, $prefix ); - - // Delete the file just created, since it would interfere with the copy we - // are about to do. We only care that the dir name we copy to is unique. - unlink ( $dir ); - - exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status ); - - if ( $status != 0 ) { - die ( "src directory copy failed!" ); - } - return $dir; -} - -/** - * Write iPXE config files based on value of given flags - * - * iPXE compile options are stored in src/config/*.h . - * We write out a config file for each set of options. - * - * @param string $config_dir directory to write .h files to - * @param array $flags array of compile options for this build - * - * @return void - */ -function write_ipxe_config_files ( $config_dir, $flags ) -{ - global $flag_table; - - $cfgsecs = get_flag_cfgsecs (); - - foreach ( $cfgsecs as $cfgsec ) { - - $fname = $config_dir . "/" . $cfgsec . ".h"; - - $fp = fopen ( $fname, "wb" ); - if ( $fp <= 0 ) { - die ( "Unable to open $fname file for output!" ); - } - - $ifdef_secname = "CONFIG_" . strtoupper ( $cfgsec ) . "_H"; - - fwrite ( $fp, "#ifndef ${ifdef_secname}\n" ); - fwrite ( $fp, "#define ${ifdef_secname}\n" ); - fwrite ( $fp, "#include <config/defaults.h>\n" ); - - foreach ( $flags as $key => $value ) { - // When the flag matches this section name, write it out - if ( $flag_table[$key]["cfgsec"] == $cfgsec ) { - fwrite ( $fp, pprint_flag ( $key, $value ) . "\n" ); - } - } - fwrite ( $fp, "#endif /* ${ifdef_secname} */\n" ); - fclose ( $fp ); - } -} - -/** - * Output a string to a file - * - * Output a given string to a given pathname. The file will be created if - * necessary, and the string will replace the file's contents in all cases. - * - * @param string $fname pathname of file to output string to - * @param string $ftext text to output to file - * - * @return void - */ -function write_file_from_string ( $fname, $ftext ) -{ - $fp = fopen ( $fname, "wb" ); - if ( ! $fp ) { - die ( "Unable to open $fname file for output!" ); - } - fwrite ( $fp, $ftext ); - fclose ( $fp ); -} - -/** - * Delete a file or recursively delete a directory tree - * - * @param string $file_or_dir_name name of file or directory to delete - * @return bool Returns TRUE on success, FALSE on failure - */ -function rm_file_or_dir ( $file_or_dir_name ) -{ - if ( ! file_exists ( $file_or_dir_name ) ) { - return false; - } - - if ( is_file ( $file_or_dir_name ) || is_link ( $file_or_dir_name ) ) { - return unlink ( $file_or_dir_name ); - } - - $dir = dir ( $file_or_dir_name ); - while ( ( $dir_entry = $dir->read () ) !== false ) { - - if ( $dir_entry == '.' || $dir_entry == '..') { - continue; - } - rm_file_or_dir ( $file_or_dir_name . '/' . $dir_entry ); - } - $dir->close(); - - return rmdir ( $file_or_dir_name ); -} - -//// -// Debugging functions -//// - -/** - * Emit html code to display given array of compile options (flags) - * - * @param array $flags array of compile options for this build - * - * @return void - */ -function show_flags ( $flags ) -{ - echo ( "\$flags contains " . count ( $flags ) . " elements:" . "<br>" ); - - foreach ( $flags as $key => $flag ) { - echo ( "\$flags[" . $key . "]=" . "\"$flag\"" . "<br>" ); - } -} - -/** - * Emit HTML code to display default array of compile options (flags) - * - * $flag_table contains default compile options and properties. This - * routine outputs HTML code to display all properties of $flag_table. - * - * @return void - */ -function dump_flag_table () -{ - global $flag_table; - - echo ( "\$flag_table contains " . count ( $flag_table ) . " elements:" . "<br>" ); - - foreach ( $flag_table as $key => $props ) { - print ( "flag_table[" . $key . "] = " . "<br>" ); - - foreach ( $props as $key2 => $props2 ) { - print ( " " . $key2 . " = " . $props2 . "<br>" ); - } - } -} - -// Parse src/bin/NIC file -list ( $nics, $roms ) = parse_nic_file (); - -// For emacs: -// Local variables: -// c-basic-offset: 4 -// c-indent-level: 4 -// tab-width: 4 -// End: - -?> diff --git a/contrib/vm/bochsrc.txt b/contrib/vm/bochsrc.txt index feda98595..19db76636 100644 --- a/contrib/vm/bochsrc.txt +++ b/contrib/vm/bochsrc.txt @@ -25,12 +25,12 @@ plugin_ctrl: unmapped=1, biosdev=1, speaker=1, e1000=1, parallel=1, serial=1 # allows you to change all the settings that control Bochs's behavior. # Depending on the platform there are up to 3 choices of configuration # interface: a text mode version called "textconfig" and two graphical versions -# called "win32config" and "wx". The text mode version uses stdin/stdout and -# is always compiled in, unless Bochs is compiled for wx only. The choice -# "win32config" is only available on win32 and it is the default there. -# The choice "wx" 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. +# called "win32config" and "wx". The text mode version uses stdin/stdout or +# gui console (if available / runtime config) and is always compiled in, unless +# Bochs is compiled for wx only. The choice "win32config" is only available on +# win32/win64 and it is the default on these platforms. The choice "wx" is only +# available when Bochs is compiled with wxWidgets support. 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. @@ -73,12 +73,14 @@ plugin_ctrl: unmapped=1, biosdev=1, speaker=1, e1000=1, parallel=1, serial=1 # "cmdmode" - call a headerbar button handler after pressing F7 (sdl, sdl2, # win32, x) # "fullscreen" - startup in fullscreen mode (sdl, sdl2) -# "gui_debug" - use GTK debugger gui (sdl, sdl2, x) / Win32 debugger gui (sdl, -# sdl2, win32) # "hideIPS" - disable IPS output in status bar (rfb, sdl, sdl2, term, vncsrv, # win32, wx, x) # "nokeyrepeat" - turn off host keyboard repeat (sdl, sdl2, win32, x) +# "no_gui_console" - use system console instead of builtin gui console +# (rfb, sdl, sdl2, vncsrv, x) # "timeout" - time (in seconds) to wait for client (rfb, vncsrv) +# "gui_debug" - This option is DEPRECATED, use command line option '-dbg_gui' +# instead. It also supports the 'globalini' extension # # See the examples below for other currently supported options. # Setting up options without specifying display library is also supported. @@ -113,9 +115,12 @@ plugin_ctrl: unmapped=1, biosdev=1, speaker=1, e1000=1, parallel=1, serial=1 # # CPU configurations that can be selected: # ----------------------------------------------------------------- +# i386 Intel 386SX +# i486dx4 Intel 486DX4 # pentium Intel Pentium (P54C) # pentium_mmx Intel Pentium MMX # amd_k6_2_chomper AMD-K6(tm) 3D processor (Chomper) +# athlon_xp AMD Athlon(tm) XP Processor # p2_klamath Intel Pentium II (Klamath) # p3_katmai Intel Pentium III (Katmai) # p4_willamette Intel(R) Pentium(R) 4 (Willamette) @@ -136,6 +141,26 @@ plugin_ctrl: unmapped=1, biosdev=1, speaker=1, e1000=1, parallel=1, serial=1 # corei7_ivy_bridge_3770k Intel(R) Core(TM) i7-3770K CPU (Ivy Bridge) # corei7_haswell_4770 Intel(R) Core(TM) i7-4770 CPU (Haswell) # broadwell_ult Intel(R) Processor 5Y70 CPU (Broadwell) +# corei7_skylake_x Intel(R) Core(TM) i7-7800X CPU (Skylake) +# corei3_cnl Intel(R) Core(TM) i3-8121U CPU (Cannonlake) +# corei7_icelake_u QuadCore Intel Core i7-1065G7 (IceLake) +# tigerlake 11th Gen Intel(R) Core(TM) i5-1135G7 (TigerLake) +# sapphire_rapids Intel(R) Xeon(R) w9-3475X (Sappire Rapids) +# arrow_lake 15th Gen Intel(R) Core(TM) Ultra 5 245K (ArrowLake) +# +# ADD_FEATURES: +# Enable one of more CPU feature in the CPU configuration selected by MODEL. +# Could be useful for testing CPU with newer imaginary configurations by +# adding a specific feature or set of features to existing MODEL. The list +# of features to add supplied through space or comma separated string. +# +# EXCLUDE_FEATURES: +# Disable one of more CPU feature from CPU configuration selected by MODEL. +# Could be useful for testing CPU without a specific feature or set of +# features. When experiening issues booting a modern OS it could be useful +# to disable CPU features(s) to see if they responsible for the failures. +# The list of features to exclude supplied through space or comma separated +# string. # # COUNT: # Set the number of processors:cores per processor:threads per core when @@ -197,151 +222,6 @@ cpu: model=core2_penryn_t9600, count=1, ips=50000000, reset_on_triple_fault=1, i cpu: cpuid_limit_winnt=0 #======================================================================= -# CPUID: -# -# This defines features and functionality supported by Bochs emulated CPU. -# The option has no offect if CPU model was selected in CPU option. -# -# MMX: -# Select MMX instruction set support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 5. -# -# APIC: -# Select APIC configuration (LEGACY/XAPIC/XAPIC_EXT/X2APIC). -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 5. -# -# SEP: -# Select SYSENTER/SYSEXIT instruction set support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# SIMD: -# Select SIMD instructions support. -# Any of NONE/SSE/SSE2/SSE3/SSSE3/SSE4_1/SSE4_2/AVX/AVX2/AVX512 -# could be selected. -# -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# The AVX choises exists only if Bochs compiled with --enable-avx option. -# -# SSE4A: -# Select AMD SSE4A instructions support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# MISALIGNED_SSE: -# Select AMD Misaligned SSE mode support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# AES: -# Select AES instruction set support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# SHA: -# Select SHA instruction set support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# MOVBE: -# Select MOVBE Intel(R) Atom instruction support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# ADX: -# Select ADCX/ADOX instructions support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# XSAVE: -# Select XSAVE extensions support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# XSAVEOPT: -# Select XSAVEOPT instruction support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# AVX_F16C: -# Select AVX float16 convert instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# AVX_FMA: -# Select AVX fused multiply add (FMA) instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# BMI: -# Select BMI1/BMI2 instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# XOP: -# Select AMD XOP instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# FMA4: -# Select AMD four operand FMA instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# TBM: -# Select AMD Trailing Bit Manipulation (TBM) instructions support. -# This option exists only if Bochs compiled with --enable-avx option. -# -# X86-64: -# Enable x86-64 and long mode support. -# This option exists only if Bochs compiled with x86-64 support. -# -# 1G_PAGES: -# Enable 1G page size support in long mode. -# This option exists only if Bochs compiled with x86-64 support. -# -# PCID: -# Enable Process-Context Identifiers (PCID) support in long mode. -# This option exists only if Bochs compiled with x86-64 support. -# -# FSGSBASE: -# Enable GS/GS BASE access instructions support in long mode. -# This option exists only if Bochs compiled with x86-64 support. -# -# SMEP: -# Enable Supervisor Mode Execution Protection (SMEP) support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# SMAP: -# Enable Supervisor Mode Access Prevention (SMAP) support. -# This option exists only if Bochs compiled with BX_CPU_LEVEL >= 6. -# -# MWAIT: -# Select MONITOR/MWAIT instructions support. -# This option exists only if Bochs compiled with --enable-monitor-mwait. -# -# VMX: -# Select VMX extensions emulation support. -# This option exists only if Bochs compiled with --enable-vmx option. -# -# SVM: -# Select AMD SVM (Secure Virtual Machine) extensions emulation support. -# This option exists only if Bochs compiled with --enable-svm option. -# -# VENDOR_STRING: -# Set the CPUID vendor string returned by CPUID(0x0). This should be a -# twelve-character ASCII string. -# -# BRAND_STRING: -# Set the CPUID vendor string returned by CPUID(0x80000002 .. 0x80000004). -# This should be at most a forty-eight-character ASCII string. -# -# LEVEL: -# Set emulated CPU level information returned by CPUID. Default value is -# determined by configure option --enable-cpu-level. Currently supported -# values are 5 (for Pentium and similar processors) and 6 (for P6 and -# later processors). -# -# FAMILY: -# Set model information returned by CPUID. Default family value determined -# by configure option --enable-cpu-level. -# -# MODEL: -# Set model information returned by CPUID. Default model value is 3. -# -# STEPPING: -# Set stepping information returned by CPUID. Default stepping value is 3. -#======================================================================= -#cpuid: x86_64=1, mmx=1, sep=1, simd=sse4_2, apic=xapic, aes=1, movbe=1, xsave=1 -#cpuid: family=6, model=0x1a, stepping=5 - -#======================================================================= # MEMORY # Set the amount of physical memory you want to emulate. # @@ -357,8 +237,14 @@ cpu: cpuid_limit_winnt=0 # memory pool. You will be warned (by FATAL PANIC) in case guest already # used all allocated host memory and wants more. # +# BLOCK_SIZE: +# Memory block size select granularity of host memory allocation. Very +# large memory configurations might requre larger memory blocks which +# configurations with small memory might want memory block smaller. +# Default memory block size is 128K. +# #======================================================================= -memory: guest=512, host=256 +memory: guest=512, host=256, block_size=512 #======================================================================= # ROMIMAGE: @@ -368,28 +254,50 @@ memory: guest=512, host=256 # starting at address 0xfffe0000, and it is exactly 128k long. The legacy # version of the Bochs BIOS is usually loaded starting at address 0xffff0000, # and it is exactly 64k long. -# You can 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. -# The start address is optional, since it can be calculated from image size. -# The Bochs BIOS currently supports only the option "fastboot" to skip the -# boot menu delay. +# +# FILE +# Name of the BIOS image file. You can use the environment variable $BXSHARE +# to specify the location of the BIOS. +# +# ADDRESS +# The start address is optional, since it can be calculated from image size. +# +# OPTIONS +# The Bochs BIOS currently only supports the option "fastboot" to skip the +# boot menu delay. +# +# FLASH_DATA +# This parameter defines the file name for the flash BIOS config space loaded +# at startup if existing and saved on exit if modified. The Bochs BIOS doesn't +# use this feature yet. +# +# Please note that if you use the BIOS-bochs-legacy romimage BIOS option, +# you cannot use a PCI enabled VGA ROM BIOS. +# Please note that if you use a SeaBIOS binary in romimage BIOS option, +# you must use a PCI enabled VGA ROM BIOS. #======================================================================= #romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot +#romimage: file=$BXSHARE/BIOS-bochs-legacy #romimage: file=$BXSHARE/bios.bin-1.13.0 # http://www.seabios.org/SeaBIOS +#romimage: file=$BXSHARE/i440fx.bin, flash_data=escd.bin +#romimage: file=asus_p6np5.bin, flash_data=escd.bin #romimage: file=mybios.bin, address=0xfff80000 # 512k at memory top romimage: file=bochs/bios/BIOS-bochs-latest #======================================================================= # VGAROMIMAGE # You now need to load a VGA ROM BIOS into C0000. +# Please note that if you use the BIOS-bochs-legacy romimage BIOS option, +# you cannot use a PCI enabled VGA ROM BIOS option such as the cirrus +# option shown below. #======================================================================= -#vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest -#vgaromimage: file=bios/VGABIOS-lgpl-latest-cirrus +#vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest.bin +#vgaromimage: file=bios/VGABIOS-lgpl-latest-cirrus.bin #vgaromimage: file=$BXSHARE/vgabios-cirrus.bin-1.13.0 # http://www.seabios.org/SeaVGABIOS #vgaromimage: file=bios/VGABIOS-elpin-2.40 -vgaromimage: file=bochs/bios/VGABIOS-lgpl-latest +vgaromimage: file=bochs/bios/VGABIOS-lgpl-latest.bin #======================================================================= # OPTROMIMAGE[1-4]: @@ -406,7 +314,7 @@ vgaromimage: file=bochs/bios/VGABIOS-lgpl-latest #optromimage2: file=optionalrom.bin, address=0xd1000 #optromimage3: file=optionalrom.bin, address=0xd2000 #optromimage4: file=optionalrom.bin, address=0xd3000 -optromimage1: file=../../src/bin/intel.rom, address=0xcb000 +optromimage1: file=../../src/bin/intel.rom, address=0xc8000 #optramimage1: file=/path/file1.img, address=0x0010000 #optramimage2: file=/path/file2.img, address=0x0020000 @@ -426,7 +334,9 @@ optromimage1: file=../../src/bin/intel.rom, address=0xcb000 # UPDATE_FREQ # This parameter specifies the number of display updates per second. # The VGA update timer by default uses the realtime engine with a value -# of 5. This parameter can be changed at runtime. +# of 10 (valid: 1 to 75). This parameter can be changed at runtime. +# The special value 0 enables support for using the frame rate of the +# emulated graphics device. # # REALTIME # If set to 1 (default), the VGA timer is based on realtime, otherwise it @@ -440,6 +350,10 @@ optromimage1: file=../../src/bin/intel.rom, address=0xcb000 # the monitor EDID data. By default the 'builtin' values for 'Bochs Screen' # are used. Other choices are 'disabled' (no DDC emulation) and 'file' # (read monitor EDID from file / path name separated with a colon). +# +# VBE_MEMSIZE +# With this parameter the size of the memory for the Bochs VBE extension +# can be defined. Valid values are 4, 8, 16 and 32 MB (default is 16 MB). # Examples: # vga: extension=cirrus, update_freq=10, ddc=builtin #======================================================================= @@ -488,6 +402,8 @@ optromimage1: file=../../src/bin/intel.rom, address=0xcb000 # KEYMAP: # This enables a remap of a physical localized keyboard to a # virtualized us keyboard, as the PC architecture expects. +# Using a language specifier instead of a file name is also supported. +# A keymap is also required by the paste feature. # # USER_SHORTCUT: # This defines the keyboard shortcut to be sent when you press the "user" @@ -504,7 +420,7 @@ optromimage1: file=../../src/bin/intel.rom, address=0xcb000 # keyboard: keymap=gui/keymaps/x11-pc-de.map # keyboard: user_shortcut=ctrl-alt-del #======================================================================= -#keyboard: type=mf, serial_delay=250 +#keyboard: type=mf, serial_delay=150 #======================================================================= # MOUSE: @@ -529,8 +445,8 @@ optromimage1: file=../../src/bin/intel.rom, address=0xcb000 # TOGGLE: # The default method to toggle the mouse capture at runtime is to press the # CTRL key and the middle mouse button ('ctrl+mbutton'). This option allows -# to change the method to 'ctrl+f10' (like DOSBox), 'ctrl+alt' (like QEMU) -# or 'f12'. +# to change the method to 'ctrl+f10' (like DOSBox), 'ctrl+alt' (legacy QEMU), +# 'ctrl+alt+g' (QEMU current) or 'f12'. # # Examples: # mouse: enabled=1 @@ -567,7 +483,8 @@ mouse: enabled=0 # PCI chipset. These options can be specified as comma-separated values. # By default the "Bochs i440FX" chipset enables the ACPI and HPET devices, but # original i440FX doesn't support them. The options 'noacpi' and 'nohpet' make -# it possible to disable them. +# it possible to disable them. The option 'noagp' disables the incomplete AGP +# subsystem of the i440BX chipset. # # Example: # pci: enabled=1, chipset=i440fx, slot1=pcivga, slot2=ne2k, advopts=noacpi @@ -772,10 +689,11 @@ ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9 # This defines the boot sequence. Now you can specify up to 3 boot drives, # which can be 'floppy', 'disk', 'cdrom' or 'network' (boot ROM). # Legacy 'a' and 'c' are also supported. +# The new boot choice 'usb' is only supported by the i440fx.bin BIOS. # Examples: # boot: floppy # boot: cdrom, disk -# boot: network, disk +# boot: network, usb, disk # boot: cdrom, floppy, disk #======================================================================= #boot: floppy @@ -929,15 +847,15 @@ parport1: enabled=1, file="parport.out" # waveoutdrv: # This defines the driver to be used for the waveout feature. # Possible values are 'file' (all wave data sent to file), 'dummy' (no -# output) and the platform-dependant drivers 'alsa', 'oss', 'osx', 'sdl' -# and 'win'. +# output), 'pulse', 'sdl' (both cross-platform) and the platform-dependant +# drivers 'alsa', 'oss', 'osx' and 'win'. # waveout: # This defines the device to be used for wave output (if necessary) or # the output file for the 'file' driver. # waveindrv: # This defines the driver to be used for the wavein feature. -# Possible values are 'dummy' (recording silence) and platform-dependent -# drivers 'alsa', 'oss', 'sdl' and 'win'. +# Possible values are 'dummy' (recording silence), 'pulse', 'sdl' (both +# cross-platform) and platform-dependent drivers 'alsa', 'oss' and 'win'. # wavein: # This defines the device to be used for wave input (if necessary). # midioutdrv: @@ -967,6 +885,7 @@ parport1: enabled=1, file="parport.out" # the Beep() function. The 'gui' mode forwards the beep to the related # gui methods (currently only used by the Carbon gui). #======================================================================= +#speaker: enabled=1, mode=sound, volume=15 speaker: enabled=1, mode=system #======================================================================= @@ -1000,14 +919,15 @@ speaker: enabled=1, mode=system # log: The file to write the sb16 emulator messages to. # 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. +# non-continuous sound. 1000000 is usually a good value. This needs a +# reasonably correct setting for the IPS parameter of the CPU option +# and also depends on the clock sync setting. # # Examples for output modes: # sb16: midimode=2, midifile="output.mid", wavemode=1 # MIDI to file # sb16: midimode=1, wavemode=3, wavefile="output.wav" # wave to file and device #======================================================================= -#sb16: midimode=1, wavemode=1, loglevel=2, log=sb16.log, dmatimer=600000 +#sb16: midimode=1, wavemode=1, loglevel=2, log=sb16.log, dmatimer=900000 #======================================================================= # ES1370: @@ -1069,7 +989,8 @@ speaker: enabled=1, mode=system # # BOOTROM: The bootrom value is optional, and is the name of the ROM image # to load. Note that this feature is only implemented for the PCI version of -# the NE2000. +# the NE2000. For the ISA version using one of the 'optromimage[1-4]' options +# must be used instead of this one. # # If you don't want to make connections to any physical networks, # you can use the following 'ethmod's to simulate a virtual network. @@ -1137,34 +1058,40 @@ e1000: enabled=1, mac=52:54:00:12:34:56, ethmod=tuntap, ethdev=/dev/net/tun:tap0 # the numeric keypad to the USB device instead of the PS/2 keyboard. If the # keyboard is selected, all key events are sent to the USB device. # -# To connect a 'flat' mode image as a USB hardisk you can use the 'disk' device -# with the path to the image separated with a colon. To use other disk image modes -# similar to ATA disks the syntax 'disk:mode:filename' must be used (see below). +# To connect a disk image as a USB hardisk you can use the 'disk' device. Use +# the 'path' option in the optionsX parameter to specify the path to the image +# separated with a colon. To use other disk image modes similar to ATA disks +# the syntax 'path:mode:filename' must be used (see below). # -# To emulate a USB cdrom you can use the 'cdrom' device name and the path to -# an ISO image or raw device name also separated with a colon. An option to -# insert/eject media is available in the runtime configuration. +# To emulate a USB cdrom you can use the 'cdrom' device and the path to an +# ISO image or raw device name can be set with the 'path' option in the +# optionsX parameter also separated with a colon. An option to insert/eject +# media is available in the runtime configuration. # -# To emulate a USB floppy you can use the 'floppy' device with the path to the -# image separated with a colon. To use the VVFAT image mode similar to the -# legacy floppy the syntax 'floppy:vvfat:directory' must be used (see below). +# To emulate a USB floppy you can use the 'floppy' device and the path to a +# floppy image can be set with the 'path' option in the optionsX parameter +# separated with a colon. To use the VVFAT image mode similar to the legacy +# floppy the syntax 'path:vvfat:directory' must be used (see below). # An option to insert/eject media is available in the runtime configuration. # # The device name 'hub' connects an external hub with max. 8 ports (default: 4) -# to the root hub. To specify the number of ports you have to add the value -# separated with a colon. Connecting devices to the external hub ports is only -# available in the runtime configuration. +# to the root hub. To specify the number of ports you have to use the 'ports' +# option in the optionsX parameter with the value separated with a colon. +# Connecting devices to the external hub ports is only available in the runtime +# configuration. # # The device 'printer' emulates the HP Deskjet 920C printer. The PCL data is -# sent to a file specified in bochsrc.txt. The current code appends the PCL -# code to the file if the file already existed. The output file can be -# changed at runtime. +# sent to a file specified in the 'file' option with the optionsX parameter. +# The current code appends the PCL code to the file if the file already existed. +# The output file can be changed at runtime. # # The optionsX parameter can be used to assign specific options to the device -# connected to the corresponding USB port. Currently this feature is used to -# set the speed reported by device ('low', 'full', 'high' or 'super'). The -# available speed choices depend on both HC and device. The option 'debug' turns -# on debug output for the device at connection time. +# connected to the corresponding USB port. The option 'speed' can be used to set +# the speed reported by device ('low', 'full', 'high' or 'super'). The available +# speed choices depend on both HC and device. The option 'debug' turns on debug +# output for the device at connection time. The option 'pcap' turns on packet +# logging in PCAP format. +# # For the USB 'disk' device the optionsX parameter can be used to specify an # alternative redolog file (journal) of some image modes. For 'vvfat' mode USB # disks the optionsX parameter can be used to specify the disk size (range @@ -1174,15 +1101,23 @@ e1000: enabled=1, mac=52:54:00:12:34:56, ethmod=tuntap, ethdev=/dev/net/tun:tap0 # supported (can fix hw detection in some guest OS). The USB floppy also # accepts the parameter "write_protected" with valid values 0 and 1 to select # the access mode (default is 0). +# +# For a high- or super-speed USB 'disk' device the optionsX parameter can include +# the 'proto:bbb' or 'proto:uasp' parameter specifying to use either the bulk-only +# Protocol (default) or the USB Attached SCSI Protocol. If no such parameter +# is given, the 'bbb' protocol is used. A Guest that doesn't support UASP +# should revert to bbb even if the 'uasp' attribute is given. See the usb_ehci: +# or usb_xhci: section below for an example. (Only 1 LUN is available at this time) #======================================================================= #usb_uhci: enabled=1 -#usb_uhci: enabled=1, port1=mouse, port2=disk:usbstick.img -#usb_uhci: enabled=1, port1=hub:7, port2=disk:growing:usbdisk.img -#usb_uhci: enabled=1, port2=disk:undoable:usbdisk.img, options2=journal:redo.log -#usb_uhci: enabled=1, port2=disk:usbdisk2.img, options2=sect_size:1024 -#usb_uhci: enabled=1, port2=disk:vvfat:vvfat, options2="debug,speed:full" -#usb_uhci: enabled=1, port1=printer:printdata.bin, port2=cdrom:image.iso -#usb_uhci: enabled=1, port2=floppy:vvfat:diskette, options2="model:teac" +#usb_uhci: port1=mouse, port2=disk, options2="path:usbstick.img" +#usb_uhci: port1=hub, options1="ports:6, pcap:outfile.pcap" +#usb_uhci: port2=disk, options2="path:undoable:usbdisk.img, journal:u.redolog" +#usb_uhci: port2=disk, options2=""path:usbdisk2.img, sect_size:1024" +#usb_uhci: port2=disk, options2="path:vvfat:vvfat, debug, speed:full" +#usb_uhci: port2=cdrom, options2="path:image.iso" +#usb_uhci: port1=printer, options1="file:printdata.bin" +#usb_uhci: port2=floppy, options2="path:vvfat:diskette, model:teac" #======================================================================= # USB_OHCI: @@ -1200,19 +1135,61 @@ e1000: enabled=1, mac=52:54:00:12:34:56, ethmod=tuntap, ethdev=/dev/net/tun:tap0 # 6-port hub. The portX parameter accepts the same device types with the # same syntax as the UHCI controller (see above). The optionsX parameter is # also available on EHCI. +# The HC will default to three UHCI companion controllers, but you can specify +# either UHCI or OHCI. Each companion controller will be evenly divided +# with 2 ports each, the first 2 on the first companion, and so on. #======================================================================= #usb_ehci: enabled=1 +#usb_ehci: enabled=1, companion=uhci +#usb_ehci: enabled=1, companion=ohci +#usb_ehci: port1=disk, options1="speed:high, path:hdd.img, proto:bbb" +#usb_ehci: port1=disk, options1="speed:high, path:hdd.img, proto:uasp" #======================================================================= # USB_XHCI: # This option controls the presence of the USB xHCI host controller with a -# 4-port hub. The portX parameter accepts the same device types with the -# same syntax as the UHCI controller (see above). The optionsX parameter is -# also available on xHCI. NOTE: port 1 and 2 are USB3 and only support -# super-speed devices, but port 3 and 4 are USB2 and support speed settings -# low, full and high. +# default 4-port hub. The portX parameter accepts the same device types +# with the same syntax as the UHCI controller (see above). The optionsX +# parameter is also available on xHCI. +# +# The xHCI emulation allows you to set the number of ports used with a range +# of 2 to 10, requiring an even numbered count. +# +# NOTE: The first half of the ports, (ports 1 and 2 on a 4-port hub) are +# USB3 only and support super-speed devices. The second half ports (ports +# 3 and 4) are USB2 and support speed settings of low, full, or high. +# The xHCI also allows for different host controllers using the model= +# parameter. Currently, the two allowed options are "uPD720202" and +# "uPD720201". The first defaults to 2 sockets (4 ports) and the later +# defaults to 4 sockets (8 ports). +#======================================================================= +#usb_xhci: enabled=1 # defaults to the uPD720202 w/4 ports +#usb_xhci: enabled=1, n_ports=6 # defaults to the uPD720202 w/6 ports +#usb_xhci: enabled=1, model=uPD720202 # defaults to 4 ports +#usb_xhci: enabled=1, model=uPD720202, n_ports=6 # change to 6 ports +#usb_xhci: enabled=1, model=uPD720201 # defaults to 8 ports +#usb_xhci: enabled=1, model=uPD720201, n_ports=10 # change to 10 ports +#usb_xhci: port1=disk, options1="speed:super, path:hdd.img, proto:bbb" +#usb_xhci: port1=disk, options1="speed:super, path:hdd.img, proto:uasp" +#usb_xhci: port3=disk, options3="speed:high, path:hdd.img, proto:uasp" + #======================================================================= -#usb_xhci: enabled=1 +# USB Debugger: +# This is the experimental USB Debugger for the Windows Platform. +# Specify a type (none, uhci, ohci, ehci, xhci) and one or more triggers. +# (Currently, only xhci is supported, with some uhci in the process) +# Triggers: +# reset: will break and load the debugger on a port reset +# enable: will break and load the debugger on a port enable +# doorbell: will break and load the debugger a xHCI Command Ring addition +# event: will break and load the debugger on a xHCI Event Ring addition +# data: will break and load the debugger on a xHCI Data Ring addition +# start_frame: will break and load the debugger on start of frame +# (this is different for each controller type) +# non_exist: will break and load the debugger on a non-existant port access +# (experimental and is under development) +#======================================================================= +#usb_debug: type=xhci, reset=1, enable=1, start_frame=1, doorbell=1, event=1, data=1, non_exist=1 #======================================================================= # PCIDEV: @@ -1232,11 +1209,20 @@ e1000: enabled=1, mac=52:54:00:12:34:56, ethmod=tuntap, ethdev=/dev/net/tun:tap0 #======================================================================= # MAGIC_BREAK: # This enables the "magic breakpoint" feature when using the debugger. -# The useless cpu instruction XCHG BX, BX causes Bochs to enter the +# The useless cpu instructions XCHG %REGW, %REGW causes Bochs to enter the # debugger mode. This might be useful for software development. # -# Example: +# You can specify multiple at once: +# +# cx dx bx sp bp si di +# +# Example for breaking on "XCHGW %DI, %DI" or "XCHG %SP, %SP" execution +# magic_break: enabled=1 di sp +# +# If nothing is specified, the default will be used: XCHGW %BX, %BX # magic_break: enabled=1 +# +# Note: Windows XP ntldr can cause problems with XCHGW %BX, %BX #======================================================================= magic_break: enabled=1 @@ -1262,12 +1248,27 @@ magic_break: enabled=1 # very early when writing BIOS or OS code for example, without having to # bother with setting up a serial port or etc. Reading from port 0xE9 will # will return 0xe9 to let you know if the feature is available. -# Leave this 0 unless you have a reason to use it. +# Leave this 0 unless you have a reason to use it. By enabling the +# 'all_rings' option, you can utilize the port e9 hack from ring3. # # Example: # port_e9_hack: enabled=1 +# port_e9_hack: enabled=1, all_rings=1 +#======================================================================= +port_e9_hack: enabled=1, all_rings=1 + +#======================================================================= +# IODEBUG: +# I/O Interface to Bochs Debugger plugin allows the code running inside +# Bochs to monitor memory ranges, trace individual instructions, and +# observe register values during execution. By enabling the 'all_rings' +# option, you can utilize the iodebug ports from ring3. For more +# information, refer to "Advanced debugger usage" documentation. +# +# Example: +# iodebug: all_rings=1 #======================================================================= -port_e9_hack: enabled=1 +#iodebug: all_rings=1 #======================================================================= # fullscreen: ONLY IMPLEMENTED ON AMIGA |
