 Hello, my name is Maciej and together with Przemek we will tell you a presentation about opening interserver based on OpenBMC example. So, the agenda. First I will tell you a little bit about OpenBMC and OpenBMC history and overview. Then I will tell you what features are supported in OpenBMC and architecture of high level architecture of OpenBMC. Then we will go to interspecific features that are built on top of OpenBMC. Then I will tell you how to get involved into the community and Przemek will give you some live demo. So, it's 1998 and something new arrived in the data center world. It's called the Baseboard Management Controller BMC and it's a separate chip located on a server board that has multiple physical connections to multiple platform components. It also has a dedicated firmware running on it and from the interesting part that it had a dedicated NIC card for remote management. The first version had some basic features like IPMI, support, event logging, power control, system watchdog timer and also OEM-specific features that each vendor delivered. Ok, so it made a life of data center administrator a little bit easier because earlier he had to, every time he had to physically go to the server and do something with it and now he can just log on to BMC web UI and perform the same task there. One was that each vendor delivered their own firmware so in some cases still he had to go to the server room to do something because this vendor was not supporting it earlier. Ok, so in 2015 OpenBMC arrived the idea was to create an open source BMC firmware stack. I was not there but I can imagine there were two reasons to create it. First of all customers were not really happy that there is a chip that is running some black box firmware on it because it has great power over the platform and it had dedicated network interface card that's not in all cases wireless. On the way behind the firewall so sometimes it was available externally it was very tempting for the hackers to attack the BMC so basically customers wanted to know what's going on on their BMCs and the second thing was that imagine there are two vendors of BMC firmware both of them are delivering the same features the same basic features and some additional features but the basic features were pretty much the same so vendor A and vendor B were delivering port, power management, fan speed control etc. I can imagine that vendor A for that maybe it's a little bit stupid to do this when the competing company is also doing it so they went to them and said we will do APMI, you will do power management and fan control for example. So the reasons were quite obvious and in 2015 two companies IBM and Facebook decided to start the projects both of them were named open BMC the idea was the same but the implementation was different so I don't know exactly what happened later but finally the IBM initiative were able to gather more companies to join it so between 2015 and 2018 there was a rapid growth of the community and as a result in 2017 open BMC became a Linux foundation project part of Linux foundation project and in 2020 we have like 3D companies contributing to the source code something around 140 repositories and a lot of email subscribers to the mailing list ok, if it goes to features support we have data center administrator can use web UI but they can also use Redfish interface so Redfish was something new it was created in 2014 and the idea was to standardize the interface between each vendor so Redfish created a protocol protocol the interface that was based on HTTP and JSON and OData and they were releasing something called Schemas so Schemas was they were saying for example if you want to implement power management and Redfish interface to it you have to do it in this specific and only way so it was forcing standardization between each vendor so then we have host management IPMI 2.0 compliance sensor scanning and monitoring we can update BMC and BIOS firmware remotely we have for better management we have SSH serial overland and remote KVM we have user management with multiple roles certificates and held up support and we have also virtual media that we can install for example operating, new operating system remotely on the host so this is just a top of the iceberg so there's a lot of other features that are not listed here and every day we are working to add new features to it if it goes to the architecture so we have our BMC chip and all its physical connections then there's U-boot that it's loading Linux kernel and drivers and at the top we have the application layer so each feature is implemented as a service multiple services that are communicating with each other over debuts all of the services are managed by system D and the whole distribution is built using Yocto so now data center admins can still use the web UI for the day-to-day task on the single server but if they would like to you know do tasks on multiple servers they will probably do some scripting around RedFish because it's a standardised interface ok so companies are still adding some additional features on top of OpenBMC so Intel is trying to build some features that will enable and enhance usage of its hardware so what we have the first one is out-of-band CPU crush dump collection so in case of critical platform error it will automatically gather crunched up data from the CPU decode it and publish it over RedFish for the user it will help to debug CPU problems with also PCI Express devices and memory problems next thing is BMC Autonomous SPS Dam so this will basically also in case of critical platform error will gather the debug data from management engines firmware and will publish it over RedFish also and the third thing is out-of-band platform telemetry streaming so what we plan to do is to gather all possible telemetry that's available for BMC and stream it to third-party monitoring and analytics tools so hopefully it will give some more information about why did it fail so if you like the idea and you want to join the community you have here all the links all the code defects and documentation is stored on github for communication we are using mailing list IRC channel and Riot channel and from my part this will be also if you are interested if your code run on big percentage of the servers soon then this is the way to do it and now Szemek will show you a demo ok so let's start the demo part I will show you how to add RedFish schema so is it difficult yes but only at the beginning so at the beginning you have to get familiarized with some new concepts so it's quite new quite a big amount of information that you have to gather at the beginning so the first time is not so easy but the next time and subsequent ones are really really easy and just a copy-paste thing ok for this demo I created a simple OEM schema fortune generator I made a service backend which serves fortunes or addages like the tool we know fortune I will generate two kinds of fortunes related to computers and some questions OEM schema will show those fortunes and there is also an action which makes to the next fortune is shown ok so theory first of all we have to documentation redfish is well documented on the VMTF page there is a redfish redfish page so take a look at the also take a look at our data standard it's a base of the language of description of schema all schemas are written in rl and jason to start take a look at the structure how the whole redfish looks like what are the links and where in order to do this effectively use mockups prepared for that reason redfish uses REST API so also get some knowledge on the rest implementation of redfish in OpenBMC is made in modern C++ Dbass uses Sdbass Plus library all is asynchronous so we use boost azio for most work hardware for BMC is mostly based on processors with one core so please stick to one thread module if you want to make some threading use coroutines C++ coroutines or boost coroutines ok, so let's do the backend backend is based on Dbass interface between redfish and backend is via Dbass Dbass is the main IPC so it's good to make the backend API coherent with redfish schema so create a service in the XYZ OpenBMC project namespace adding service name at the end of course it's good to expose object manager interface to get easier access to members if there are more of them after the backend is created of course it's good to create the service file and allow systemD to start and manage the service by systemD so let's move to the schema part and implementation of the schema so if anybody wants to make his own schema it's good to start a discussion on redfish forum because maybe somebody works on the same feature and as redfish should be as generic as possible so you can join efforts and make the feature together after the design is completed you have to write the description of schema you can use documentation other schemas there are a lot of them there are also after the XML part is completed you have to also generate jason version and the files should be put in the proper location, like the below ok and implementation itself we have redfish call directory in BMC web BMC web serves redfish we name the file using snake case like the end name of the schema every each type of redfish node derives from the node class we have collection which lists all our items in our of our type item which shows the properties of given item and last actions actions are used to for example start host reset host using the redfish API once we have the code we have to register it include our file and place unique pointer in the node list and that's more or less everything we got a lot of helpers to send messages error classes to show feedback jason utilities to take parameters from the rest lots of boilerplate code i said it's more or less copy-paste programming just few lines of implementation, generic implementation and after at the end it's important to make compatibility check our schema complies with standard ok, so let's start code walkthrough ok, so this is how the description of the schema looks like we have our fortune property there is an action and that's it for now here we have yes, it's our backend so the backend looks like at the bottom at the bottom there is a sdbus initialization make it bigger ok as a dbus initialization we create a project and the music as your run once the object when we do the run the object is created here we register the service in the dbus we add some interfaces let's see a little below fortune property and generate method it's the same as the schema description so let's move to the implementation of Redfish schema, so first collection here we have the path in the tree maybe do this bigger ok, here we set the permissions for the for the item there is do get implementation so we have get method we just create some data for the schema which are obligatory and then then we put some information inside so here we take the items from the dbus it's all in dbus dbus callbacks here we put the information and that's it here is the item it looks like the collection but the information is quite different because you have the data and here is the action plus and somewhere somewhere here we take the information from the schema and put it oh yes, it's here put it inside the result jason ok, and the last one action node it looks almost the same but here we have post method actions uses post rest post so implementation we implement post ok, so let's move on to the web browser here is the root node there is a place when I put our OEM schema so let's take a look system it's a collection of systems available of course oh, here is our fortune generator let's click on it yes, and we have fortune questions fortune computer let's click that one ok, there is a fortune and right now let's generate the post here is the result 204 no content, it's ok and after we reload it yes, there is another fortune so and that's all any questions to both parts the question is whether there is a plan to make a security security yes, security implemented in OpenBMC that's not exactly the question I can answer because I just make some other areas of the OpenBMC so not exactly can answer the question no idea no no, I don't think there are any plans right now to do it but I know there are plans to add some additional security features to it, I'm not sure if the security will be also involved, let's say it doesn't matter what you measure upstairs in the operating system in OpenBMC because we will rock under your operation because you are very powerful at this level for years mentions please at least signal from the PMC that you are changing the configuration so we know this up there at the measurement modules of the operating system if there are any initiatives this has been normally written under an open license that has someone raised to issue and are there any interfaces in order to get this result as far as I know there are already plans I'm not sure if this will answer your question but there are plans to make BMC as a root of trust of the platform so basically BMC will be the component that will let's say check all the firmware on the platform the question was the question was the question was do you think between BMC on the one hand and trust computing ROM never stuff or operating system on the other hand sorry it's a hard question to repeat that's openBMC supports so yeah OpenBMC is communicating with if the question was OpenBMC jest wspaniałymi na Intel SPS. Więc OpenBMC jest komunikacjący na Intel SPS. Więc to jest jedna z punktów kontaktów IPMI.