P4C
The P4 Compiler
Loading...
Searching...
No Matches
p4RuntimeSerializer.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef CONTROL_PLANE_P4RUNTIMESERIALIZER_H_
9#define CONTROL_PLANE_P4RUNTIMESERIALIZER_H_
10
11#pragma GCC diagnostic push
12#pragma GCC diagnostic ignored "-Wunused-parameter"
13#pragma GCC diagnostic ignored "-Wpedantic"
14#include <google/protobuf/util/json_util.h>
15#pragma GCC diagnostic pop
16
17#include <iosfwd>
18#include <unordered_map>
19
20#include "lib/cstring.h"
21#include "p4RuntimeTypes.h"
22
23namespace p4 {
24namespace config {
25namespace v1 {
26class P4Info;
27} // namespace v1
28} // namespace config
29namespace v1 {
30class WriteRequest;
31} // namespace v1
32} // namespace p4
33
34namespace P4::IR {
35class P4Program;
36} // namespace P4::IR
37
38namespace P4 {
39class CompilerOptions;
40} // namespace P4
41
42namespace P4 {
43
44using namespace literals;
45
48struct P4RuntimeAPI {
51 void serializeP4InfoTo(std::ostream *destination, P4RuntimeFormat format) const;
54 void serializeEntriesTo(std::ostream *destination, P4RuntimeFormat format) const;
55
58 const ::p4::config::v1::P4Info *p4Info;
61 const ::p4::v1::WriteRequest *entries;
62
63 // Print options to use while outputting JSON.
64 google::protobuf::util::JsonPrintOptions jsonPrintOptions;
65
66 P4RuntimeAPI(const ::p4::config::v1::P4Info *p4Info, const ::p4::v1::WriteRequest *entries)
68 jsonPrintOptions.add_whitespace = true;
69 }
70
71 P4RuntimeAPI(const ::p4::config::v1::P4Info *p4Info, const ::p4::v1::WriteRequest *entries,
72 google::protobuf::util::JsonPrintOptions jsonPrintOptions)
73 : p4Info(p4Info), entries(entries), jsonPrintOptions(jsonPrintOptions) {}
74};
75
76namespace ControlPlaneAPI {
78} // namespace ControlPlaneAPI
79
81class P4RuntimeSerializer {
82 public:
83 static P4RuntimeSerializer *get();
84
85 void registerArch(const cstring archName,
87
100 P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch);
101
111 void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options);
112
121 void serializeP4RuntimeIfRequired(const P4RuntimeAPI &p4Runtime,
122 const CompilerOptions &options);
123
126 static cstring resolveArch(const CompilerOptions &options);
127
128 private:
129 P4RuntimeSerializer();
130
131 std::unordered_map<cstring, const ControlPlaneAPI::P4RuntimeArchHandlerBuilderIface *>
132 archHandlerBuilders{};
133};
134
137P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch = "v1model"_cs);
138
141void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options);
142
143} // namespace P4
144
145#endif /* CONTROL_PLANE_P4RUNTIMESERIALIZER_H_ */
Definition frontends/common/options.h:31
Definition cstring.h:85
static cstring resolveArch(const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1649
void serializeP4InfoTo(std::ostream *destination, P4RuntimeFormat format) const
Definition p4RuntimeSerializer.cpp:1495
P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch)
Definition p4RuntimeSerializer.cpp:1664
void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1572
P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch)
Definition p4RuntimeSerializer.cpp:1459
void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1668
void serializeEntriesTo(std::ostream *destination, P4RuntimeFormat format) const
Definition p4RuntimeSerializer.cpp:1516
TODO(antonin): High level goals of the generator go here!!
Definition dpdk/control-plane/bfruntime_arch_handler.h:44
Definition constantParsing.h:22
Definition cstring.h:80
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
P4RuntimeFormat
P4Runtime serialization formats.
Definition p4RuntimeTypes.h:14
Definition p4RuntimeArchHandler.h:195
Definition p4RuntimeSerializer.h:48
const ::p4::config::v1::P4Info * p4Info
Definition p4RuntimeSerializer.h:58
const ::p4::v1::WriteRequest * entries
Definition p4RuntimeSerializer.h:61