From fd28dd7ae4dafc8b919098feb2876623474eeeaa Mon Sep 17 00:00:00 2001 From: Ratan Gupta Date: Mon, 1 Aug 2016 04:58:01 -0500 Subject: Implement Network Settings Override We want to implement the network settings override functionality. This is an OEM boot parameter selector, using parameter ID 0x61. The first byte of the parameter data is the same as parameter ID 5 (ie, the valid flag in the top bit). Persistency doesn't matter here, as petitboot will not clear out this setting. The rest of the parameter data is a host network settings description. For other BMC firmware, the BMC just treats this as opaque (the BMC will just return the same data (including that data1 byte), in response to a Get System Boot Option). For OpenBMC, we may want the BMC to know how to construct that data; the spec for that is at: http://ozlabs.org/~sam/ipmi-network-format Closes openbmc/openbmc#267 Change-Id: I2af8776718deda97acf90d10504783085ccf7323 Signed-off-by: Ratan Gupta --- docs/ipmi-network-format.md | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/ipmi-network-format.md (limited to 'docs') diff --git a/docs/ipmi-network-format.md b/docs/ipmi-network-format.md new file mode 100644 index 0000000..74dc606 --- /dev/null +++ b/docs/ipmi-network-format.md @@ -0,0 +1,74 @@ +On platforms running AMI BMC firmware (Habanero and Firestone at the moment), +the 'Get/Set' System Boot Options' command has been extended to allow overrides +to the network configuration to be specified. +In Petitboot this will cause any existing network configuration to be overridden +by the specified configuration. The format of each IPMI request is similar to +that of the usual boot options request, with a slightly different payload. + +The start of the request is similar to a usual boot option override, but +specifies the fields of interest differently, ie; + +Specify 'chassis bootdev', field 96, data1 +0x00 0x08 0x61 0x80 + +The rest of request format is defined by Petitboot as: + - 4 byte cookie value (always 0x21 0x70 0x62 0x21) + - 2 byte version value (always 0x00 0x01) + - 1 byte hardware address size (eg. 0x06 for MAC address) + - 1 byte IP address size (eg. 0x04 for IPv4) + - Hardware (MAC) address + - 1 byte flags for 'ignore' and 'method', where method = 0 is DHCP + and method = 1 is Static. +And for static configs: + - IP Address + - 1 byte subnet value + - Gateway address + +Describing each field in more detail: + +Specify 'chassis bootdev', field 96, data1 +0x00 0x08 0x61 0x80 + +Set a special cookie that Petitboot will recognise: +0x21 0x70 0x62 0x21 + +Specify the version (only 1 at the moment) +0x00 0x01 + +Specify the size of the MAC address and IP address. This is used to +differentiate between IPv4 and IPv6 addresses, or potential future support for +Infiniband/etc. +0x06 0x04 (6-byte MAC address, IPv4 IP address) + +Set the hardware address of the interface you want to override, eg: +0xf4 0x52 0x14 0xf3 0x01 0xdf + +Specify 'ignore' or 'static/dynamic' flags. The second byte specifies to use +either DHCP or static IP configuration (0 for DHCP). +0x00 0x01 + +The below fields are required if setting a static configuration: + +Set the IP address you want to use, eg: +0x0a 0x3d 0xa1 0x42 + +Set the subnet mask (short notation), eg '16': +0x10 + +Set the gateway address, eg: +0x0a 0x3d 0x2 0x1 + +All together this should look like: +0x00 0x08 0x61 0x80 0x21 0x70 0x62 0x21 +0x00 0x01 0x06 0x04 0xf4 0x52 0x14 0xf3 +0x01 0xdf 0x00 0x01 0x0a 0x3d 0xa1 0x42 +0x10 0x0a 0x3d 0x2 0x1 + +To clear a network override, it is sufficient to clear out the request, or set +a zero-cookie which Petitboot will reject. Eg: +0x00 0x08 0x61 0x80 0x00 0x00 0x00 0x00 + +You can 'Get' the override back with +0x00 0x09 0x61 0x80 0x00 +which should return whatever is currently set. + -- cgit v1.2.1