# Google Redfish Server

gBMCWeb is Google's Redfish server with several added features on top of OpenBMC
BMCWeb.

To enable gBMCWeb for your machine. Include
the [meta-gbmc-staging layer](https://gbmc.googlesource.com/meta-gbmc-staging/),
and add the following config to your build (e.g., MACHINE.conf).

```python
# Use gBMCWeb
DISTRO_FEATURES:append = " gbmcfork"
```

The following is an alphabetical list of added features.

## Multi-threading

Google enabled multi-threading, which turns the single-threaded process
into a fully multithreaded daemon, greatly improved performance for GET
requests, especially on multi-core (4+) BMCs.

See go/multithread-gbmcweb for details.

Enable it by adding `bmcweb_multithread` to your `DISTRO_FEATURES`.

## gRPC as Transport

WIP

## NVMe Redfish Storage

We pre-ported some features from https://github.com/CodeConstruct/bmcweb
for OOB NVMe storage management:

1. StorageController.SecurityReceive and StorageController.SecuritySend
2. Volume detach/attach/delete/create
3. Drive.SecureErase (Sanitize)

Our contractor CodeConstruct will upsteam these features to OpenBMC.

## Plugins

Google has built a plugin system for BMCWeb to support machine specific features
or behaviors. Please see [Plugins.md](PLUGINS.md) for detailed user guide.

## Stateful BMCWeb

http://go/stateful-bmcweb

## Docker native builds and unit tests:

```
# switch to the folder:
cd /opt/bmc/gbmc/build/${MACHINE}/workspace/sources/bmcweb

# create a volume for the build folder:
docker volume create build_volume

# pull the container from:
docker pull gcr.io/gbmc-builders/openbmc-ubuntu-unit-test:latest

# run the openbmc docker:
docker run -v `pwd`:/workspace -v build_volume:/workspace/_build -it gcr.io/gbmc-builders/openbmc-ubuntu-unit-test:latest bash

# build (within the running container ^):
cd /workspace && meson setup _build && ninja install -C _build && ninja test -C _build

```

For more information you can follow go/build-gbmcweb-workstation to find the steps on how to build and run unit tests for gBMCWeb locally.
